你好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
答案 0 :(得分:3)
我会通过创建一个包含组及其限制的单独数据集来完成此操作。
limdat = data.frame(Species = c("versicolor", "virginica"), limits = 8)
然后,您可以使用此数据集通过geom_crossbar
或geom_errorbar
或其他内容添加水平线。请注意,ymax
和ymin
设置为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)