簡體   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