将geom_hline + Sample Size添加到boxplot中

时间:2013-05-15 00:11:57

标签: r ggplot2

使用ggplot,我正在尝试

  1. 在boxplot中添加一条水平线
  2. 将样本大小添加到x轴。
  3. 我有以下数据集:

    Site, Aluminum_Dissolved, Federal_Guideline
    M1, 0.1, 0.4
    M1, 0.2, 0.4
    M1, 0.5, 0.4
    M2, 0.6, 0.4
    M2, 0.4, 0.4
    M2, 0.3, 0.4
    

    添加水平线

    #Make a boxplot with horizontal error bars
    ggplot(ExampleData, aes(x = Site,y = Aluminum_Dissolved))+
        stat_boxplot(geom='errorbar', linetype=1)+
        geom_boxplot(fill="pink")
    
    #Now want to add guideline value at 0.4 with corresponding "Federal Guideline" in legend, I tried:
    geom_hline(0.4)
    

    我收到以下错误:

      

    get(x,envir = this,inherits = inh)中的错误(this,...):     映射应该是由aes或aes_string

    创建的未评估映射的列表

    我尝试在字符串中添加数据,即geom_hline("ExampleData$Federal_Guideline),但我得到与上面相同的错误。

    添加样本大小(n =到x轴):

    最后,我想将n添加到x轴的标签(即M2 (n=3))。我可以使用以下代码在常规R中执行此操作:names=paste(b$names, "(n=", b$n,")")),其中b = boxplot函数,但我无法弄清楚如何在{{1}中执行此操作}}

1 个答案:

答案 0 :(得分:2)

您需要在geom_hline中明确命名参数,否则它不知道0.4所指的是什么。

所以

ggplot(ExampleData, aes(x = Site,y = Aluminum_Dissolved))+
    stat_boxplot(geom='errorbar', linetype=1)+
    geom_boxplot(fill="pink") +
    geom_hline(yintercept = 0.4)

将生成所需的水平线。

要更改x轴上的标签,请使用scale_x_discrete更改标签

您可以使用

等预先计算这些内容
library(plyr)
xlabels <- ddply(ExampleData, .(Site), summarize, 
                 xlabels = paste(unique(Site), '\n(n = ', length(Site),')'))

ggplot(ExampleData, aes(x = Site,y = Aluminum_Dissolved))+
     stat_boxplot(geom='errorbar', linetype=1)+
     geom_boxplot(fill="pink") + geom_hline(yintercept = 0.4) + 
      scale_x_discrete(labels = xlabels[['xlabels']])