我正在根据这些数据绘制箱图:
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)为了提高这个图的清晰度,我想在POS
和{{1}之间的各个块之间添加分隔符,即sim v
和sim v
之间的分隔符等等(见图中丑陋的红线)。
我一直在与C
挣扎,没有运气。
或者,我想在块之间添加空格。
2)如果我以灰度打印此图,我无法区分不同的块。我正试图强制使用不同的调色板:
geom_vline
再一次,没有运气,情节根本没有改变。
你建议做什么?
答案 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")
会给这样的东西,
答案 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=width
和colour="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}}
请注意,我没有为要匹配的颜色定义任何因子名称。我认为颜色只是根据它们的顺序应用于你的因子水平,但我可能是错的。
以上所有结果的最终结果:
答案 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)
我不确定这是否有效,因为我没有您的数据来测试它。