有没有办法为ggplot的alpha添加图例?

时间:2010-07-01 18:06:44

标签: r ggplot2

我有一个有很多重叠点的情节(从2到10)。向点添加抖动使其非常嘈杂且没有吸引力。我喜欢在美学中加入阿尔法。但是,我想有一个图例,读者可以看到每个透明胶片有多少重叠点。有这样的方式吗?

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

假设我使用上面的代码。我如何合并alpha的图例?

3 个答案:

答案 0 :(得分:1)

这是一个如何伪造这个的例子。在改变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

enter image description here

alpha = 0.01

enter image description here

答案 1 :(得分:0)

不完全是你想要的,但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()

答案 2 :(得分:0)

从其他答案中获取线索,似乎您可能希望将x-y点分成唯一值,然后总结每个x-y坐标箱的唯一值数。

使用其他答案中的虚假数据,

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")

PIC:

enter image description here