如何将垂直线添加到R中的ggplot箱图

时间:2012-06-26 20:54:07

标签: r colors ggplot2 line boxplot

我正在根据这些数据绘制箱图:

MY_LABEL     MY_REAL     MY_CATEGORY
1 [POS]       .56            POS
1 [POS]       .57            POS
1 [POS]       .37            POS
2 [POS]       .51            POS
1 [sim v]     .65            sim v
...

我正在使用ggplot2:

ggplot( data=myDF, aes( x=MY_LABEL, y=MY_REAL, fill=MY_CATEGORY ) ) +
    scale_colour_manual( values=palette ) +
    coord_flip() + 
    geom_boxplot( outlier.size = 0 )

这很好用,并按字段MY_CATEGORY对箱图进行分组: enter image description here

我想做两件事:

1)为了提高这个图的清晰度,我想在POS和{{1}之间的各个块之间添加分隔符,即sim vsim v之间的分隔符等等(见图中丑陋的红线)。 我一直在与C挣扎,没有运气。 或者,我想在块之间添加空格。

2)如果我以灰度打印此图,我无法区分不同的块。我正试图强制使用不同的调色板:

geom_vline

再一次,没有运气,情节根本没有改变。

你建议做什么?

3 个答案:

答案 0 :(得分:5)

这对你有用吗?

require(ggplot2)
mtcars$cyl2<- ifelse(mtcars$cyl > 4, c('A'), c('B')) 
p <- ggplot(mtcars, aes(factor(cyl), mpg))
p + geom_boxplot() + facet_grid(. ~ cyl2, scales = "free", space = "free")

会给这样的东西, bbb

答案 1 :(得分:4)

没有人覆盖水平线路,所以我想我会添加它。不确定为什么geom_vline()不适合你。这就是我所做的(选择使用Eric Fail的方法):

require(ggplot2)
p <- ggplot(mtcars, aes(factor(cyl), mpg))
p <- p + geom_boxplot(aes(fill=factor(cyl))) + coord_flip()
p <- p + geom_vline(xintercept=c(1.5,2.5))
p

这里只有三个箱图,但在游戏中,ggplot似乎将它们放在整数位置。只需找出你想在第(nth)行之后的哪一个框,并将xintercept参数放在n+0.5处。您可以根据自己的喜好显然更改厚度和颜色:只需在xintercept位后添加size=widthcolour="name"

顺便说一句,geom_vline()似乎对我有用,无论是在coord_flip()之前还是之后。我发现这是违反直觉的。


我不确定bdemarest是否正确,您需要名称以匹配类别名称。我认为问题在于您使用的是scale_colour_manual(),如果您使用aes(..., colour=var)而使用了fill=var,则适用scale_fill_manual。因此,您需要p <- p + scale_fill_manual(values=c("black","gray","white")) p 。基于以上内容,我们可以添加:

{{1}}

请注意,我没有为要匹配的颜色定义任何因子名称。我认为颜色只是根据它们的顺序应用于你的因子水平,但我可能是错的。


以上所有结果的最终结果:

cyl boxplot

答案 2 :(得分:1)

要更改填充颜色,您需要一个指定的值向量。名称需要与y轴类别名称完全匹配。

scale_fill_manual(values=c("POS"="black", "sim v"="gray50",
                           "C"="gray80", "sim t"="white"))

要分隔y轴类别,请尝试facet_grid()

facet_grid(factor(MY_CATEGORY) ~ ., drop=TRUE)

我不确定这是否有效,因为我没有您的数据来测试它。