大小散点图点均值与样本量成正比

Sizing scatter plot point mean proportional to sample size

我正在使用 ggplot2 创建散点图,并希望调整我的点均值与用于计算均值的样本量成比例的大小。这是我的代码,我使用 fun.y 来计算组的平均值 Trt:

branch1 %>%
ggplot() + aes(x=Branch, y=Flow_T, group=Trt, color=Trt) +
stat_summary(aes(group=Trt), fun.y=mean, geom="point", size=)

我对 R 比较陌生,但我的猜测是在 aes 函数中使用 size 来调整我的点数。我认为提取 fun.y=mean 中使用的样本大小并创建一个可以输入到 size 中的新 class 可能是个好主意,但我不确定该怎么做。

任何帮助将不胜感激!干杯。

编辑

这是我的数据供参考:

Plant Branch Pod_B Flow_Miss Pod_A Flow_T Trt     Dmg
<int>  <dbl> <int>     <int> <int>  <dbl> <fct> <int>
1     1   1.00     0        16    20  36.0  Early     1
2     1   2.00     0         1    17  18.0  Early     1
3     1   3.00     0         0    17  17.0  Early     1
4     1   4.00     0         3    14  17.0  Early     1
5     1   5.00     5         2     4  11.0  Early     1
6     1   6.00     0         3     7  10.0  Early     1
7     1   7.00     0         4     6  10.0  Early     1
8     1   8.00     0        13     6  19.0  Early     1
9     1   9.00     0         2     7   9.00 Early     1
10     1  10.0      0         2     3   5.00 Early     1

编辑 2:

这是我试图通过每个 Trt(治疗)的样本大小 n 的比例调整来实现的图表,其中平均值是根据 Trt 和 [=20= 计算的] 数字。我想知道是否应该将 Branch 设为分类变量。

Plot without Proportional Sizing

如果我对你的理解是正确的,你想根据每个 Trt 组的点数来缩放点的大小。

这样的事情怎么样?请注意,我附加了您的示例数据,因为 Trt 仅包含 Early 个条目。

df %>%
    group_by(Trt) %>%
    mutate(ssize = n()) %>%
    ggplot(aes(x = Branch, y = Flow_T, colour = Trt, size = ssize)) +
        geom_point();

解释:我们按 Trt 分组,然后计算每组的样本数 ssize,并用参数 aes(...., size = ssize) 作图以确保点的大小与 [= 成比例19=]。您在这里不需要 group 美学。


更新

根据 Flow_T 的均值 Trt 缩放点,我们可以这样做:

df %>%
    group_by(Trt) %>%
    mutate(
        ssize = n(),
        mean.Flow_T = mean(Flow_T)) %>%
    ggplot(aes(x = Branch, y = Flow_T, colour = Trt, size = mean.Flow_T)) +
        geom_point();


示例数据

# Sample data
df <- read.table(text =
    "Plant Branch Pod_B Flow_Miss Pod_A Flow_T Trt     Dmg
1     1   1.00     0        16    20  36.0  Early     1
2     1   2.00     0         1    17  18.0  Early     1
3     1   3.00     0         0    17  17.0  Early     1
4     1   4.00     0         3    14  17.0  Early     1
5     1   5.00     5         2     4  11.0  Early     1
6     1   6.00     0         3     7  10.0  Early     1
7     1   7.00     0         4     6  10.0  Early     1
8     1   8.00     0        13     6  19.0  Early     1
9     1   9.00     0         2     7   9.00 Early     1
10     1  10.0      0         2     3   5.00 Early     1
11     1  10.0      0         2     3   20.00 Late     1", header = T)

@Maurits Evers 的帮助下,我通过使 Branch 成为一个因子来创建我想要的图表。以下是我的代码以及我想要的图表:

branch1$Branch <- as.factor(branch1$Branch)
branch1$Flow_T <- as.numeric(branch1$Flow_T)
branch1 %>%
  group_by(Trt, Branch) %>%
  mutate(ssize = n()) %>%
  ggplot(aes(x = Branch, y = Flow_T, colour = Trt)) +
  stat_summary(aes(size=ssize), fun.y=mean, geom="point")

Final Plot