5

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

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在此处输入图像描述

我想做两件事:

1)为了提高这个情节的清晰度,我想在各个块之间添加分隔符,即 between POSand sim v, between sim vandC等(参见情节中丑陋的红线)。我一直在挣扎geom_vline,没有运气。或者,我想在块之间添加空格。

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

scale_colour_manual( values=c("black","darkgray","gray","white") )

同样,没有运气,情节根本没有改变。

你会建议做什么?

4

3 回答 3

7

这对你有用吗?

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

于 2012-06-26T21:26:17.500 回答
6

没有人覆盖水平线路线,所以我想我会添加它。不知道为什么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=widthand 。colour="name"

顺便说一句,geom_vline()无论是 before 还是 after ,似乎都对我有用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

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


以上所有的最终结果:

圆柱箱线图

于 2012-06-26T23:33:35.803 回答
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)

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

于 2012-06-26T21:36:47.400 回答