我有使用R中的ggplot创建箱形图的代码,我想用年份和战役标记异常值。

这是我的代码来创建我的箱线图

require(ggplot2)
ggplot(seabattle, aes(x=PortugesOutcome,y=RatioPort2Dutch ),xlim="OutCome",
y="Ratio of Portuguese to Dutch/British ships") +
geom_boxplot(outlier.size=2,outlier.colour="green") +
stat_summary(fun.y="mean", geom = "point", shape=23, size =3, fill="pink") +
ggtitle("Portugese Sea Battles")

有人可以帮忙吗?我知道这是正确的,我只想标记异常值。

最佳答案

以下是使用dplyr和内置mtcars数据集的可重现解决方案。

遍历代码:首先,创建一个函数is_outlier,如果传递给它的值是异常值,则它将返回 bool(boolean) TRUE/FALSE。然后,我们执行“分析/检查”并绘制数据-首先,我们对变量group_by(在本示例中为cyl,在您的示例中为PortugesOutcome),然后在对outlier的调用中添加变量mutate(如果drat变量是一个离群值(请注意,在您的示例中,此变量与RatioPort2Dutch相对应),我们将传递drat值,否则将返回NA以便不绘制该值)。最后,我们绘制结果并通过geom_text和与我们的新变量相等的美观标签来绘制文本值;另外,我们使用hjust偏移文本(向右滑动文本),以便我们可以在离群点旁边而不是在离群点之上看到值。

library(dplyr)
library(ggplot2)

is_outlier <- function(x) {
  return(x < quantile(x, 0.25) - 1.5 * IQR(x) | x > quantile(x, 0.75) + 1.5 * IQR(x))
}

mtcars %>%
  group_by(cyl) %>%
  mutate(outlier = ifelse(is_outlier(drat), drat, as.numeric(NA))) %>%
  ggplot(., aes(x = factor(cyl), y = drat)) +
    geom_boxplot() +
    geom_text(aes(label = outlier), na.rm = TRUE, hjust = -0.3)

r - 在R中对箱线图标注离群值-LMLPHP

09-06 08:01