繁体   English   中英

在 ggplot2 图中使用多个汇总统计量

[英]Using multiple summary statistics in a ggplot2 plot

我正在分析一些房屋销售交易数据,我想生成一个地理图,用颜色表示每个(十六进制)区域的平均价格。 有些地区的数据有限,我想通过调整不透明度来反映每个地区的点数来表明这一点。

这需要我为每个十六进制计算两个统计数据:平均价格和点数。 ggplot2 包使计算和绘制图表中的一个统计数据变得非常容易,但我不知道如何计算两个.

为了说明这一点:

library(ggplot2)

N = 1000;
df_demo = data.frame(A=runif(N), B=runif(N), C=runif(N)) # dummy data

# I want to produce a hex-binned version of this:
ggplot(data=df_demo) + geom_point(mapping=aes(x=A, y=B, color=C)) 

# It's easy to get each hex's average price *or* its point density:
ggplot(data=df_demo) + stat_summary_hex(mapping=aes(x=A,y=B,z=C), fun=mean) # color = average of C across hex, but opacity can't be adjusted
ggplot(data=df_demo) + geom_hex(mapping=aes(x=A, y=B, color=C, alpha=..ndensity..)) # opacity = normalised # of points, but color is *total* value which is wrong

我想结合最后两行的效果,但这似乎不是一个选项:..ndensity.. 统计在 stat_summary_hex() 的上下文中不起作用,而 geom_hex() 不会计算平均值。

有没有办法做到这一点,我忽略了? 或者,是否有一种明显的方法可以在构建绘图之前预先计算所需的统计数据? 例如,通过在我的 dplyr 管道中确定每个数据的预期十六进制。

一个可能没有简单解决方案的提示是这个非 CRAN 包 - 如果我理解正确的话 - 或多或少地解决了这个问题。 但是,如果可能的话,我宁愿不依赖 CRAN 外的代码,所以我希望我错过了一些明显的东西。

一个不同的geom怎么样? 例如geom_tile - 您可以为每个维度 (A/B) 创建切割,然后预先计算每个图块的平均值和数量,然后像这样绘制:

library(tidyverse)

N = 1000;
df_demo = data.frame(A=runif(N), B=runif(N), C=runif(N)) %>%
  mutate(cuts_a= cut(A, breaks = 20), cuts_b= cut(B, breaks = 20)) %>%
  group_by(cuts_a, cuts_b) %>% mutate(mean_c = mean(C), n_obs = n())

# I want to produce a hex-binned version of this:
ggplot(data=df_demo) + 
  geom_tile(mapping=aes(x=cuts_a, y=cuts_b, fill=mean_c, alpha = n_obs)) 

reprex 包(v0.3.0) 于 2020 年 2 月 13 日创建

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM