【问题标题】:plot individual geom_hline for each geomp_boxplot为每个 geomp_boxplot 绘制单独的 geom_hline
【发布时间】:2014-01-23 03:42:29
【问题描述】:

我有一个箱线图,想为每个箱线图单独添加带有geom_hline 的简单水平线。

我尝试了 R 的箱线图示例。问题是:

  • 线条跨越整个绘图,而不仅仅是箱线图。
  • 他们在箱线图后面.. ;-)

提前感谢您的帮助。

    ### ADDING Lines
    somelines <- data.frame(value=c(0.2,0.3,0.4,0.6,0.7),boxplot.nr=c(1,2,3,4,5))

    abc <- adply(matrix(rnorm(100), ncol = 5), 2, quantile, c(0, .25, .5, .75, 1))
    b <- ggplot(abc, aes(x = X1, ymin = `0%`, lower = `25%`, middle = `50%`, upper = `75%`, ymax = `100%`)) + 
        geom_hline(aes(yintercept= value),somelines)
    b + geom_boxplot(stat = "identity") 
    b + geom_boxplot(stat = "identity") + coord_flip()
    b + geom_boxplot(aes(fill = X1), stat = "identity")

【问题讨论】:

    标签: r ggplot2 lines boxplot


    【解决方案1】:

    您可以使用geom_segment() 添加这些行。使用boxplot.nr-0.5 表示行首,boxplot.nr+0.5 表示行尾,value 表示y 和yend。还要在geom_segment() 中添加inherit.aes=FALSE,以确保geom_segment() 不会查找用于填充箱线图的变量X1

    ggplot(abc, aes(x = X1, ymin = `0%`, lower = `25%`, middle = `50%`, 
                                       upper = `75%`, ymax = `100%`)) + 
      geom_boxplot(aes(fill = X1), stat = "identity")+
      geom_segment(data=somelines,aes(x=boxplot.nr-0.5,xend=boxplot.nr+0.5,
                           y=value,yend=value),inherit.aes=FALSE,color="orange",size=1.5)
    

    第二次调用geom_boxplot() 也可以获得相同的结果 - 因为 somelines 对象的每个级别中只有一个值,因此箱线图将显示为线条。

    ggplot(abc, aes(x = X1, ymin = `0%`, lower = `25%`, middle = `50%`, 
                    upper = `75%`, ymax = `100%`)) + 
      geom_boxplot(aes(fill = X1), stat = "identity")+  
      geom_boxplot(data=somelines,aes(factor(boxplot.nr),value),
                   inherit.aes=FALSE,color="orange",size=1.5)
    

    【讨论】:

    • 太棒了!非常感谢这个答案,我不会想到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    相关资源
    最近更新 更多