2010-07-01 45 views
4

我有一個有許多重疊點(從2-10)的情節。將抖動添加到點使其非常嘈雜和不吸引人。我喜歡在美學中添加一個阿爾法。不過,我希望有一個圖例,讀者可以看到每個透明膠片有多少點重疊。有沒有這樣的方式?有沒有辦法爲ggplot的alpha添加圖例?

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

比方說,我使用上面的代碼。我將如何結合alpha的圖例?

+0

這不回答你的問題,但也許只是具有透明度的一點點抖動可能不會太嘈雜,但仍指示點的數量。 – Aniko 2010-07-01 19:25:57

+0

您可以將數據獲取到GGobi中,並使用Brush工具覆蓋發生覆蓋的區域,從而導出顯示描述並使用'rggobi'和DescribeDisplay'包在R中播放。或相反亦然。 – aL3xa 2010-07-01 22:52:10

回答

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() 
+0

非常感謝。這幾乎就是我想要的。如果只有我可以將六邊形變成圓圈... – Maiasaura 2010-07-01 19:43:28

+1

祝你好運圈子平鋪飛機;) – hadley 2010-07-01 20:13:30

+1

哈! 我想下一個最好的事情就是使用geom_point,但創建另一個計數列並將其設置爲大小。 – Maiasaura 2010-07-01 20:22:15

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

+0

由於某些原因,這對我來說不起作用(傳說中的圓點都是一樣的黑暗)。你在使用'ggplot2'的開發者版本嗎? – joran 2011-10-14 20:04:24

+0

嗨喬蘭 - 我不這麼認爲。我正在使用ggplot2_0.8.8,plyr_1。4,R版本2.11.1在i386-apple-darwin9.8.0下。情節正在通過石英裝置打印到png。 – 2011-10-14 20:37:42

+0

啊,好的。那麼,它似乎不適用於R 2.13.1和ggplot2_0.8.9的OS X。僅供參考。 – joran 2011-10-14 20:40:37

0

從其他的答案以暗示,好像你可能想bin中的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") 

圖:

enter image description here

相關問題