r - 每个点而不是单个数据点的散点图摘要统计(例如总和或平均值)

时间:2018-06-12 14:25:00

标签: r ggplot2 dplyr

我正在寻找一种在ggplot通话中汇总数据的方法,而不是之前。我可以预先聚合数据然后绘制它,但我知道有一种方法可以在ggplot调用中完成。我只是不确定如何。

在此示例中,我想获得每个(x,y)组合的均值,并将其映射到colour aes

library(tidyverse)

df <- tibble(x = rep(c(1,2,4,1,5),10), 
             y = rep(c(1,2,3,1,5),10),
             col = sample(c(1:100), 50))

df_summar <- df %>% 
  group_by(x,y) %>% 
  summarise(col_mean = mean(col))

ggplot(df_summar, aes(x=x, y=y, col=col_mean)) +
  geom_point(size = 5)

我认为必须有一个更好的方法来避免pre-ggplot步骤(是的,我也可以将管道dplyr转换为ggplot,但机制也是一样的。 / p>

例如,geom_count()对实例进行计数并将其绘制到size aes上:

ggplot(df, aes(x=x, y=y)) + geom_count()

我希望相同,但mean代替countcol代替size

我猜我需要stat_summary()stat()来电(代替..xxx ..符号),但我不能让它给我什么我需要。

1 个答案:

答案 0 :(得分:3)

您需要stat_summary_2d

ggplot(df, aes(x, y, z = col)) +
  stat_summary_2d(aes(col = ..value..), fun = 'mean', geom = 'point', size = 5)

(或calc(value),如果您使用ggplot dev版本,或将来阅读此内容。)

您可以将任意函数传递给fun

虽然stat_summary似乎很有用,但在这种情况下并非如此。它专门用于绘制的常见转换,将一系列y按x 分组,汇总为一组汇总统计信息,绘制为y(,{ {1}}和ymin)。你想要按x和y分组,所以2d就是。

请注意,这会使用分箱,因此要使分数准确对齐,您需要增加分档大小(例如ymax)。不幸的是,没有非分箱2d汇总统计信息。

enter image description here