为分类箱图添加限制,ggplot2

时间:2015-08-12 21:47:06

标签: r ggplot2 bioinformatics boxplot factors

你好ggplot2社区 -

我似乎无法弄清楚如何解决这个问题,我很乐意帮助你!

我在各个地点都有成分浓度数据,我想做的是构建一个箱线图,显示样本的分布和每个站点的局部限值。但是,在我的数据集中,某些网站有限制,而其他网站没有限制。我想在我的箱线图上方放置一条水平线,显示局部限制,但我希望线条只显示在那些包含它们的网站上。

在尝试仅在几个站点而不是整个数据集上放置一条线时,我使用geom_segment和geom_hline以及geom_errorbar甚至geom_crossbar会遇到错误。我也想避免不必要的路线。

以下是一些可以使用的虹膜样本数据。类似于我的情况,我想在萼片长度= 8处添加一条水平线,以显示在“versicolor”和“virginica”物种之上。

有办法做到这一点吗?

library(ggplot2)

sepal_leng<-ggplot(iris, aes(factor(Species), y=Sepal.Length))
sepal_leng<-sepal_leng+geom_boxplot()
sepal_leng

1 个答案:

答案 0 :(得分:3)

我会通过创建一个包含组及其限制的单独数据集来完成此操作。

limdat = data.frame(Species = c("versicolor", "virginica"), limits = 8)

然后,您可以使用此数据集通过geom_crossbargeom_errorbar或其他内容添加水平线。请注意,ymaxymin设置为y以使该行水平。

ggplot(iris, aes(factor(Species), y=Sepal.Length)) +
    geom_boxplot() +
    geom_errorbar(data = limdat, aes(y = limits, ymin = ..y.., ymax = ..y..))

enter image description here

您可能最终想要一个图例来指示线条是什么,您可以通过将常量映射到linetype来完成。

ggplot(iris, aes(factor(Species), y=Sepal.Length)) +
    geom_boxplot() +
    geom_errorbar(data = limdat, 
                aes(y = limits, ymin = ..y.., ymax = ..y.., linetype = "Local limit")) +
    scale_linetype_discrete(name = NULL)

enter image description here