R ggplot2中的比例alpha取决于每个方面的观察数量

R ggplot2中的比例alpha取决于每个方面的观察数量,r,ggplot2,visualization,alpha-transparency,R,Ggplot2,Visualization,Alpha Transparency,我很难弄清楚如何创建特定于每个方面的alpha值。要么我的一些观察结果几乎消失了(值太少,我将alpha设置得太低),要么它们形成一个大斑点(值太多,我将alpha设置得太高) 带有菱形的虚拟示例: library(tidyverse) ggplot(data = diamonds, mapping = aes(x = price, y = carat)) + geom_point(alpha = 0.1) + facet_grid(cut ~ clarity) + s

我很难弄清楚如何创建特定于每个方面的alpha值。要么我的一些观察结果几乎消失了(值太少,我将alpha设置得太低),要么它们形成一个大斑点(值太多,我将alpha设置得太高)

带有
菱形的虚拟示例

library(tidyverse)
ggplot(data = diamonds,
       mapping = aes(x = price, y = carat)) +
  geom_point(alpha = 0.1) +
  facet_grid(cut ~ clarity) +
  scale_alpha_continuous(range = c(0,1)) 

。。。在有很多值的地方工作正常,但在右上角很难找出任何东西。。。另一种选择:

ggplot(data = diamonds,
       mapping = aes(x = price, y = carat)) +
  geom_point(alpha = 0.1) +
  facet_grid(cut ~ clarity) +
  scale_alpha_continuous(range = c(0,1)) 

…在右上角更容易拾取点,但填充越多的组合已成为更坚实的模糊

我想以某种方式根据观察的数量设置alpha:

d0 <- diamonds %>% 
   group_by(cut, clarity) %>%
   summarise(n = n())
d0
# A tibble: 40 x 3
# Groups:   cut [?]
     cut clarity     n
   <ord>   <ord> <int>
 1  Fair      I1   210
 2  Fair     SI2   466
 3  Fair     SI1   408
 4  Fair     VS2   261
 5  Fair     VS1   170
 6  Fair    VVS2    69
 7  Fair    VVS1    17
 8  Fair      IF     9
 9  Good      I1    96
10  Good     SI2  1081
# ... with 30 more rows


注意:我不太确定alpha的这种刻面缩放对于这个虚拟数据是否完全有意义,但我有充分的理由用我试图可视化的实际(加权)数据来做这件事。

可以尝试
diamonds%>%add_count(cut,clearity)%%>%mutate(alpha=scales::rescale(n,c(.2,.01))
。。。然后
+geom_点(aes(alpha=I(alpha)))
。如果您确实为每个面设置了不同的alpha标度,那么您的绘图将具有误导性。也许可以尝试使用
几何平滑覆盖的
stat\u bin\u hex
。@Gregor我正在使用一些虚拟数据。。。看到最后一个了吗sentence@Gregor我不认为这会产生误导。移除比例后,我将此目标(无论如何,我为什么要这样做)视为允许查看者查看点的密度/簇。对于非理想alpha,它太饱和(只是看起来很黑)或者几乎看不见。我看到alpha被缩放到不同的数字,以让观众一致地理解不同百分比的数据在哪里,由每组“黑暗”表示。@Hendy误导性是在旁观者的眼中-如果不看到上下文和实际数据,很难判断。也许“可能误导”太强了,而“可能误导”更好——但如果某个特定的暗值表示面X上的“10点在这里”,面Y上的“100点在这里”,而无法分辨差异,则可能会误导。
ggplot(data = diamonds %>%
         group_by(cut, clarity) %>%
         mutate(n = n()),
       mapping = aes(x = price, y = carat, alpha = 1/n)) +
  geom_point() +
  facet_grid(cut ~ clarity) +
  scale_alpha_continuous(range = c(0,1))