簡體   English   中英

有沒有辦法為ggplot的alpha添加圖例?

[英]Is there a way to add a legend for ggplot's alpha?

我有一個有很多重疊點的情節(從2到10)。 向點添加抖動使其非常嘈雜且沒有吸引力。 我喜歡在美學中加入阿爾法。 但是,我想有一個圖例,讀者可以看到每個透明膠片有多少重疊點。 有這樣的方式嗎?

ggplot(data=mydata,aes(x=x,y=y)) + geom_point(size=3,shape=2,aes(alpha=1/3))

假設我使用上面的代碼。 如何為alpha添加圖例?

這是一個如何偽造這個的例子。 改變alpha嘗試幾次。

require(ggplot2)

n = 10000
alpha = 0.01

set.seed(12345)
data = data.frame(replicate(2, rnorm(n)))

dev.new(width=4, height=3)
p = qplot(X1, X2, data=data, alpha=alpha)

fake_scale = scale_alpha('# of overlapping pts', breaks=pretty(c(alpha, 1)), labels=as.character(pretty(c(alpha, 1))/alpha))

p + fake_scale

alpha = 0.1

在此輸入圖像描述

alpha = 0.01

在此輸入圖像描述

不完全是你想要的,但geom_hex()怎么樣?

如果你不離散(bin)它,我認為R需要計算重疊面積和重疊數(sp?)(這也取決於點大小),這聽起來很難。

library(hexbin)

mydata <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(data=mydata,aes(x=x,y=y)) + geom_hex()

從其他答案中獲取提示,似乎您可能希望將xy點分成唯一值,然后總結每個xy坐標箱的唯一值數。

使用來自另一個答案的假數據,

library(ggplot2)
library(dplyr)
library(magrittr)

n = 10000

set.seed(12345)
data = data.frame(replicate(2, rnorm(n)))

我按小數點后第一位進行分箱,然后計算每個箱中有多少

data2 <- data %>% mutate(
  x = round(X1,1),  
  y = round(X2,1)
) %>% 
  group_by(x,y) %>%
  tally() %>% 
  dplyr::filter(n<=10) %>% 
  mutate(transp = n/10) 

我過濾掉了最大的垃圾箱只是為了說明目的。 現在, transp列具有您想要的計算,您可以將其提供給alpha並在圖例中獲取它

data2 %>% 
  ggplot(aes(x=x,y=y)) + 
  geom_point(aes(alpha = as.factor(transp))) + 
  scale_alpha_discrete(
    "Number of overlapping points",
    labels = 1:10
  )+ 
  theme(legend.position = "bottom")

圖:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM