我有一个有很多重叠点的情节(从2到10)。向点添加抖动使其非常嘈杂且没有吸引力。我喜欢在美学中加入阿尔法。但是,我想有一个图例,读者可以看到每个透明胶片有多少重叠点。有这样的方式吗?
ggplot(data=mydata,aes(x=x,y=y)) + geom_point(size=3,shape=2,aes(alpha=1/3))
假设我使用上面的代码。我如何合并alpha的图例?
答案 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
alpha = 0.01
答案 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: