[英]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.