面积图中多个变量的堆叠均值

Stacking means of multiple variables in an area plot

我想制作一个面积图,显示三个变量(Vr、Hr 和 Ar)在具有 7 个稀释步骤的稀释系列 (x = dil) 中的平均演变。每个稀释度有 5 个重复,我想将其总结为平均值。 这三个变量代表变量 M 的比例 (Vr + Hr + Ar = M)。所以我不想将比例相加到 100%,而是将每个变量的相应区域堆叠起来以达到顶部的 M(添加为一条线)。

如何在面积图中叠加三个变量的均值以显示每个稀释步骤的比例分布?到目前为止我试过了,但是层没有堆叠:

mline <- ggplot(data = data, aes(x = dil), na.action=na.omit) +
  stat_summary(aes(y = M, group = 1), fun = mean,
               geom ="line") +
  stat_summary(aes(y = Hr, group = 1), fun= mean,
               geom ="area", position = "stack") +
  stat_summary(aes(y = Ar, group = 1), fun= mean,
               geom ="area", position = "stack") +
  stat_summary(aes(y = Vr, group = 1), fun= mean,
               geom ="area", position = "stack")
mline

此示例的数据框如下所示:

dput(data)
structure(list(dil = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 
5L, 5L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L), .Label = c("1", 
"2", "3", "4", "5", "6", "7"), class = "factor"), M = c(0.366666667, 
12.03333333, 1, 6.933333333, 4.533333333, 2.166666667, 5.633333333, 
1, 1.4, 0, 15.66666667, 21.16666667, 6.033333333, 1, 0.2, 0, 
4.533333333, 0.333333333, 0.166666667, 0, 0, 1, 0, 0.366666667, 
0, 0.166666667, 0, 0, 0, NA, 1, 3.5, 0, NA, NA), Ar = c(0.100284295, 
3.896431897, 0.333333333, 2.241353469, 1.540488607, 0.196969697, 
2.118578371, 0.095357674, 0.200607926, 0, 3.605257275, 6.81946709, 
0.930970496, 0.393446629, 0.03012711, 0, 0.468426671, 0.031017502, 
0.065574438, 0, 0, 0.333333333, 0, 0.142139889, 0, 0.015151515, 
0, 0, 0, NA, 0.090909091, 1.240533311, 0, NA, NA), Vr = c(0.010505974, 
0.46853597, 0.333333333, 0.977669123, 0.43271556, 0.196969697, 
0.749485112, 0, 0.051063836, 0, 3.262519219, 2.859413375, 0.641593028, 
0.078689326, 0.009038133, 0, 0.637060272, 0.015508751, 0.013114888, 
0, 0, 0.333333333, 0, 0, 0, 0.015151515, 0, 0, 0, NA, 0.090909091, 
0.827022207, 0, NA, NA), Hr = c(0.255876398, 7.668365466, 0.333333333, 
3.714310741, 2.560129166, 1.772727273, 2.765269851, 0.904642326, 
1.148328239, 0, 8.798890173, 11.4877862, 4.460769809, 0.527864045, 
0.160834757, 0, 3.427846391, 0.286807081, 0.087977341, 0, 0, 
0.333333333, 0, 0.224526778, 0, 0.136363636, 0, 0, 0, NA, 0.818181818, 
1.432444482, 0, NA, NA)), row.names = c(NA, -35L), class = "data.frame")

可能很简单,但我不明白。非常感谢!

你基本上有两个选择:(1)以你希望的任何方式将你的摘要统计记录到另一个数据框中,然后用那个数据框绘制,或者(2)在ggplot2中使用stat_summary来为你做这一切。我选择选项 #2,在这种情况下更容易。

第一步是将您的数据集转换为符合 Tidy Data Principles 的数据集。看起来您有一个 y 列 (dil)、一个总计列 (M) 和三个变量 VrHr 和 [=18] 的三列数据=].在这种情况下,您可以单独使用 Mdil,但我将使用 tidyr 中的 gather() 将您的 3 列转换为 2 列:一列用于变量名和一个值:

library(ggplot2)
library(dplyr)
library(tidyr)

# where df is your data frame
df1 <- df %>%
  gather(key='var', value='value', -c(dil, M))

然后,您可以使用 stat_summary 命令绘图,但请注意,您应该 group= 通过 var 列。

m <- ggplot(df1, aes(x=dil, group=var)) +
  stat_summary(aes(y=M), geom='line', fun=mean) +
  stat_summary(aes(y=value, fill=var), alpha=0.5,
     geom='area', position='stack', fun=mean)
m