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

Mul*_*one 4 r colors line ggplot2 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
...
Run Code Online (Sandbox Code Playgroud)

我正在使用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 )
Run Code Online (Sandbox Code Playgroud)

这工作正常,并按字段对箱图进行分组MY_CATEGORY: 在此输入图像描述

我想做两件事:

1)为了提高这个图的清晰度,我想在各个块之间添加分隔符,即在POSsim v之间sim v,之间和之间C等(参见图中丑陋的红线).我一直在努力geom_vline,没有运气.或者,我想在块之间添加空格.

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

scale_colour_manual( values=c("black","darkgray","gray","white") )
Run Code Online (Sandbox Code Playgroud)

再一次,没有运气,情节根本没有变化.

你有什么建议吗?

Eri*_*ail 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")
Run Code Online (Sandbox Code Playgroud)

会给这样的东西, BBB


Hen*_*ndy 5

没有人涵盖水平线路线,因此我想添加一下。不知道为什么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
Run Code Online (Sandbox Code Playgroud)

这里只有三个箱形图,但是在玩耍时,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
Run Code Online (Sandbox Code Playgroud)

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


以上所有的最终结果:

圆柱箱图