Boxplot,如何匹配异常值的颜色以填补美学?

yos*_*bai 16 r ggplot2

我试图将boxplot的异常值颜色与美学(scale_colour_discrete)设置的填充颜色相匹配.

这是一个例子.

m <- ggplot(movies, aes(y = votes, x = factor(round(rating)),
    fill=factor(Animation)))
m + geom_boxplot() + scale_y_log10()
Run Code Online (Sandbox Code Playgroud)

这会在下面生成图表.如何将这些黑点更改为身体中使用的偏红/绿色?如果我理解正确的话,boxplot的outlier.colour选项似乎选择了一种颜色,而不是审美.如果有帮助,我不介意使用色彩美学.

原始版本


编辑:

改编了这个解决方案(在geom_boxplot中更改whisker定义).水平躲闪由stats_summary重置,我无法弄清楚如何取回它.因为我现在知道,所以我可以根据需要放弃异常值和拉伸胡须.

# define the summary function
f <- function(x) {
  r <- quantile(x, probs = c(0.05, 0.25, 0.5, 0.75, 0.95))
  names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
  r
}
# define outlier function, beyound 5 and 95% percentiles
o <- function(x) {
  subset(x, x < quantile(x,probs=c(0.05))[1] | quantile(x,probs=c(0.95))[1] < x)
}

m <- ggplot(movies, aes(y = votes, x = factor(round(rating)),
    colour=factor(Animation)))
m <- m + stat_summary(fun.data=f, geom='boxplot')
m <- m + stat_summary(fun.y=o, geom='point', aes(colour=factor(Animation)))
m + scale_y_log10()
Run Code Online (Sandbox Code Playgroud)

尝试失败

cbe*_*ica 10

正如@koshke所说,现在可以通过以下方式轻松实现类似于框线(而不是填充颜色)的异常值outlier.colour = NULL:

m <- ggplot(movies, aes(y = votes, x = factor(round(rating)),
    colour = factor(Animation)))
m + geom_boxplot(outlier.colour = NULL) + scale_y_log10()
Run Code Online (Sandbox Code Playgroud)

带有彩色异常值的boxplot

  • outlier.colour 必须用"ou"写
  • outlier.colour 必须在外面 aes ()

我发布这个作为一个迟到的答案,因为我发现自己一次又一次地看着这个,我也发布了相关问题ggplot2中的着色boxplot异常点?.

  • 似乎这个解决方案不再适用于ggplot2 1.0.0和R 3.1.1.任何想法如何获得新版本的匹配异常颜色? (10认同)

小智 5

我找到了一个解决方案,即geom_boxplot(outlier.colour = NULL)在最新版本的R 中设置不再起作用(@jonsnow谈论ggplot2的1.0.0版本).

为了复制@cbeleites提出的行为,您只需使用以下代码:

update_geom_defaults("point", list(colour = NULL))
m <- ggplot(movies, aes(y = votes, x = factor(round(rating)),
            colour = factor(Animation)))
m + geom_boxplot() + scale_y_log10()
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这会生成带有与线条颜色匹配的点的图.

当然,如果他需要绘制多个图,应该记住恢复默认值:

update_geom_defaults("point", list(colour = "black"))
Run Code Online (Sandbox Code Playgroud)

通过阅读github上的ggplot2更改日志找到了解决方案:

geom_boxplot()使用默认颜色,大小和形状 的异常值geom_point().更改geom_point()with 的默认值update_geom_defaults()将对异常值应用相同的更改 geom_boxplot().以前无法更改异常值的默认值.(@ThierryO,#757)

也发布在这里:ggplot2中的着色boxplot异常点?