【问题标题】:plot more than one column+facet_grid (ggplot)绘制多于一列+facet_grid(ggplot)
【发布时间】:2016-07-24 23:50:21
【问题描述】:

我的数据框是这样的:

    NUMBER  MEDIUM  DATE    DAY TREAT   NITRAT  SILI    PHOSPHAT
1   NUT1    15/07/2016  two NBNA    20.831  20.946  0.518
2   NUT2    15/07/2016  two NBNA    26.594  25.075  1.059
3   NUT3    15/07/2016  two NBNA    47.565  42.088  7.733
4   NUT4    15/07/2016  two NBNA    61.320  53.264  6.331
5   NUT5    15/07/2016  two NBNA    64.918  52.058  4.889
6   NUT1    15/07/2016  two NBNA    19.876  22.000  0.852
7   NUT2    15/07/2016  two NBNA    29.642  29.572  1.184
8   NUT3    15/07/2016  two NBNA    37.969  35.015  4.293
9   NUT4    15/07/2016  two NBNA    56.724  45.986  6.880
10  NUT5    15/07/2016  two NBNA    66.006  53.175  5.893
11  NUT1    15/07/2016  two NBNA    21.835  20.710  0.770
12  NUT2    15/07/2016  two NBNA    25.996  26.213  1.149
13  NUT3    15/07/2016  two NBNA    48.526  46.167  3.977
14  NUT4    15/07/2016  two NBNA    56.767  47.089  6.684
15  NUT5    15/07/2016  two NBNA    64.841  54.039  6.628
16  NUT1    15/07/2016  two NBA1    13.179  18.723  0.826
17  NUT2    15/07/2016  two NBA1    18.631  23.537  0.859

我想将 NITRAT、SILI 和 PHOSPHAT(带误差线)的值按 MEDIUM 排序放入 ggplot 中。总之,像这样(但也有错误栏): 为此,我尝试了功能 melt:

df <- melt(nut, id.vars='MEDIUM')

但是使用此功能后我无法使用 facet_grid

ggplot() +
  geom_bar(data=df, aes(x=MEDIUM, y=value, fill=MEDIUM),
           stat="identity", colour="black") + facet_grid(~TREAT)

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这里有一些问题需要清理:

    1. 首先,只有您要“堆叠”的列(即用于fill 美学)不应在id.vars 中:

      df <- melt(nut, id.vars=c('MEDIUM','NUMBER','DATE','DAY','TREAT')
      

      id.vars 的不同组合尝试上面的代码,以了解它是如何工作的。

    2. fill=variable 现在将为您提供三种测量类型(NITRAT、SILI 和 PHOSPHAT)中的每一种的条形图。 TREAT 仍将是熔化数据框中的一列,因为它是 id.vars 之一,因此您可以将其用于分面。

    3. 另一个问题是,看起来您实际上希望这些条形图是进入该条形图的所有值的平均值。所以你不想要stat="identity"。相反,请使用stat_summary 计算均值并将它们绘制为条形图。

    4. 要添加错误栏,请再次调用stat_summary。我使用了自举置信区间 (mean_cl_boot)。对于经典置信区间,请使用 mean_cl_normal

      pd=position_dodge(0.8)
      
      ggplot(df, aes(x=MEDIUM, y=value, fill=variable)) +
        stat_summary(fun.y=mean, geom="bar", width=0.7, position=pd) + 
        stat_summary(fun.data=mean_cl_boot, geom="errorbar", position=pd, width=0.3) +
        facet_grid(. ~ TREAT) +
        theme_bw()
      

    对于这样的情节,点可能比条更好。在这里,我们首先绘制误差条而不是第二条,因为我们希望这些点“位于”条的“顶部”。在这里没关系,因为两者颜色相同,但我这样做是出于习惯,因为我经常为误差线使用不同的颜色或透明度:

    pd=position_dodge(0.4)
    
    ggplot(df, aes(x=MEDIUM, y=value, colour=variable)) +
      stat_summary(fun.data=mean_cl_boot, geom="errorbar", position=pd, width=0.3) +
      stat_summary(fun.y=mean, geom="point", position=pd) + 
      facet_grid(. ~ TREAT) +
      theme_bw()
    

    【讨论】:

    • 您好,谢谢,但是,我仍然无法放置错误栏。我使用 summarySE 计算误差线,然后执行此操作ggplot()+ geom_bar(data=ds, aes(x=MEDIUM, y=value, fill=variable), stat="identity", colour="black", position="dodge") + facet_grid(~TREAT) + geom_errorbar(data=ds,aes(x=MEDIUM,ymin=value-se, ymax=value+se), size=0.5,width=.4, position=position_dodge(.9))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    相关资源
    最近更新 更多