【问题标题】:Sizing scatter plot point mean proportional to sample size大小散点图均值与样本大小成正比
【发布时间】:2018-03-23 12:59:32
【问题描述】:

我正在使用 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 的新类可能是个好主意,但是我不知道该怎么做。

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

编辑

这是我的数据供参考:

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 的比例大小来实现的图表,其中平均值是根据TrtBranch 数字计算的。我想知道是否应该将Branch 设为分类变量。

Plot without Proportional Sizing

【问题讨论】:

  • 更简单的方法是在 ggplot2 之前计算统计数据。您可以发布您的数据吗?
  • @PoGibas 当然!我已将其编辑为原始帖子。
  • x 轴的值是多少?还有mean?
  • @missuse x 轴值为Branch,平均值为Flow_T 基于Branch 数字。

标签: r ggplot2 size point sample


【解决方案1】:

如果我的理解正确,您想根据每个 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)作图,以确保点的大小与sscale成比例。您在这里不需要group 美学。


更新

根据Flow_TTrt 的平均值来缩放点,我们可以这样做:

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)

【讨论】:

  • 感谢您的帮助。不幸的是,我无法创建我希望的图表。为了澄清,我试图调整与计算的平均值成比例的散点大小,其中平均值是由fun.y=mean 创建的。这就是我使用stat_summary 的原因(我认为)。因此,样本大小 n 基于 TrtBranch 数字。也许我应该将Branch 视为分类变量?我在原始帖子中包含了一个图表,以显示我正在尝试做的事情......除了不包括比例大小。
  • @Cam.S 什么意思? Branch 的平均值,Flow_t 的平均值?同样,我建议您不要使用stat_summary 方法;计算任何关于数据级别的汇总统计信息要干净得多,然后只需将data.frame 交给您的绘图函数并提取相关的美学。
  • 这将是Flower_T 的平均值。我将如何事先计算汇总统计信息?我为我缺乏远见道歉......我对 R 比较陌生,建议使用stat_summary
  • @Cam.S 我已经更新了我的答案,请看一下。同样,不需要stat_summary;更简洁的是先计算对数据的任何数据操作,然后将数据传递给ggplot并映射相关美学。
  • 我以某种方式设法在我的第一条评论中写了“与计算的平均值成比例”,但我并不是说我的问题中最初提到的样本量。不过,您的解决方案非常有帮助,我现在明白在应用 ggplot 之前使用 mutate 以及其他操作。干杯。
【解决方案2】:

@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

【讨论】:

  • 请看我下面的评论。
  • 这很好,但为了更好地表示权重,您应该使点的面积与样本大小成正比...... IE aes(size=sqrt(size))
猜你喜欢
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 2013-01-27
相关资源
最近更新 更多