R 箱线图,如何匹配异常值';用颜色来填充美学?
我试图将箱线图的异常值颜色与美学设置的填充颜色相匹配(比例\颜色\离散) 这里有一个例子R 箱线图,如何匹配异常值';用颜色来填充美学?,r,ggplot2,R,Ggplot2,我试图将箱线图的异常值颜色与美学设置的填充颜色相匹配(比例\颜色\离散) 这里有一个例子 m <- ggplot(movies, aes(y = votes, x = factor(round(rating)), fill=factor(Animation))) m + geom_boxplot() + scale_y_log10() m我找到了一种方法,编辑原始网格对象 library(ggplot2) match.ol.col <- function(plt,aes.
m <- ggplot(movies, aes(y = votes, x = factor(round(rating)),
fill=factor(Animation)))
m + geom_boxplot() + scale_y_log10()
m我找到了一种方法,编辑原始网格对象
library(ggplot2)
match.ol.col <- function(plt,aes.cp='fill') {
# matches outliers' color to either fill or colour aesthetics
# plt: ggplot layer object having boxplot
# aes.cp: aetsthetic from which copy color. must be either 'fill' or 'col'
# returns grid objects, so print it wigh grid.draw(), not print()
if (aes.cp %in% c('color', 'colour')) aes.cp <- 'col'
grob <- ggplotGrob(plt)
bps <- getGrob(grob, 'boxplots', grep=T)
for (bp in bps$children) {
p <- getGrob(bp, 'point', grep=T)
if (is.null(p)) next
r <- getGrob(bp, 'rect', grep=T)
grob <- geditGrob(grob, p$name, gp=gpar(col=r$gp[[aes.cp]]))
}
return(grob)
}
m <- ggplot(movies, aes(y = votes, x = factor(round(rating)),
colour=factor(Animation)))
p <- m + geom_boxplot() + scale_y_log10()
grob <- match.ol.col(p, aes.cp='colour')
grid.draw(grob)
库(ggplot2)
match.ol.col正如@koshke所说,通过设置outlier.color=NULL
,现在可以很容易地将异常值着色为框中的线条(而不是填充颜色):
m <- ggplot(movies, aes(y = votes, x = factor(round(rating)),
colour = factor(Animation)))
m + geom_boxplot(outlier.colour = NULL) + scale_y_log10()
m我找到了一个解决方案,解决了设置geom_箱线图(outlier.color=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()
通过阅读github上的以下内容找到了解决方案:
geom_boxplot()
的异常值使用
geom_point()
。使用更改geom_point()
的默认值
update\u geom\u defaults()
将对
geom\u boxplot()
。更改异常值的默认值以前是不允许的
可能的(@ThierryO,#757)
也在这里发布:我有一个非常类似的问题。我想将风格与之前的情节相匹配,所以想要黑色边框和彩色填充,并匹配异常值
我的解决方案是过度打印,一次使用color=和默认的实心圆点,一次使用fill=和开放圆点形状
p <- ggplot(mtcars, aes(factor(cyl), mpg))
p + geom_boxplot(aes(colour=factor(cyl))) +
geom_boxplot(aes(fill=factor(cyl)), outlier.shape=21)
p这在当前版本中是不可能的,但在下一个版本中是可能的。@kohske,也许你仍然可以从你的评论中找到答案。如果yosukesabai接受这个答案,那么SO社区很清楚这个问题已经解决了。(这给你带来了一些代表:)。事实上,我找到了科斯基的答案,也许可以用来解决我的问题。希望它不会太糟糕…@kohske,你能详细说明一下新版本和时间框架会修正什么吗?我只是用position='dodge'处理不同的几何体,前提是x比例是离散的。这就是正在进行的吗?@JoshO'Brien,我认为我的“解决方案”是不可接受的。。。当我知道如何避开这两个数据集时,我会照你说的做。谢谢你的评论。在我接受你的答案之前,我试着检查你的答案是否有效,但不知怎的,我的R安装搞砸了。我相信你,我只是接受了你的回答@吉泽白:对于老问题,不要急于接受迟来的答案。希望你的安装能再次正常工作。请注意,正如OP标题所示,这与填充颜色不匹配,但它与轮廓/线条颜色匹配,这正是我所需要的+1@RyanStochastic:你说得对-我刚从另一篇文章中抄来。但是,设置填充颜色很简单。这个解决方案似乎不再适用于ggplot2 1.0.0和R 3.1.1。您知道如何为新版本获得匹配的异常值颜色吗?您也可以在第二次调用中执行geom_boxplot
中的outlier.color=NA
。使用ggplot2
2.2.1,我发现不需要套印p+geom_盒形图(aes(填充=因子(cyl)),outlier.shape=21)
足以在与框填充匹配的异常点中获得填充颜色。
update_geom_defaults("point", list(colour = "black"))
p <- ggplot(mtcars, aes(factor(cyl), mpg))
p + geom_boxplot(aes(colour=factor(cyl))) +
geom_boxplot(aes(fill=factor(cyl)), outlier.shape=21)