向分类箱线图 ggplot2 添加限制

adding limits to categorical boxplot, ggplot2

你好 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

我会通过创建一个包含组及其限制的单独数据集来做到这一点。

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..))

您可能最终想要一个图例来指示线条是什么,您可以通过将常量映射到 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)