我正在寻找一种在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
代替count
,col
代替size
我猜我需要stat_summary()
或stat()
来电(代替..xxx ..符号),但我不能让它给我什么我需要。
答案 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汇总统计信息。