2013-11-21 124 views
1

我試圖使用ggplot通過顏色/透明度創建僞boxplot,但我掙扎了一點。這個想法是,對於x軸上的任何點,特定的y值出現的次數越多,(x,y)點應該越黑。要增加併發症,我沒有對每個(x,y)進行計數,但是我有一個計數爲(x , ymin:ymax),這意味着這個計數適用於(x,ymin)和(x,ymax)之間的所有點。顏色編碼Boxplot

搜索似乎是有點棘手和我「米不能發現什麼我可以使用,我可以通過自己得到的最接近的是如下,但是這需要很長的更大的數據集。

library(ggplot2) 
set.seed(1) 
(d <- data.frame(cbind(x = sample(1:3, 10, replace = TRUE), y = sample(3:8, 10, replace = TRUE)), fac = sample(1:3, 10, replace = TRUE))) 

p1 <- ggplot() 

for (i in seq(nrow(d))) 
{ 
    p1 <- p1 + geom_rect(
    data=d[i,], 
    aes(
     xmin = fac - .4, 
     xmax = fac + .4, 
     ymin = x, 
     ymax = y), 
    alpha = .25 
) 

} 

enter image description here

任何建議?我寧願一個ggplot的解決方案。感謝

11月23日更新,隨着特洛伊的幫助,我已經到了這裏。現在唯一的問題是圖例在每個矩形的t值之間變化,而它應該從x,y處的累積t開始。

library(ggplot2) 
set.seed(1) 
d <- data.frame(cbind(x = sample(1:3, 6, replace = TRUE), 
         ymin = sample(3:8, 6, replace = TRUE), 
         ymax = sample(3:8, 6, replace = TRUE), 
         t = sample(3:8, 6, replace = TRUE)/10 
        )) 

ggplot(data=d) + 
    geom_rect(aes(xmin=x-0.4,xmax=x+0.4,ymin=ymin,ymax=ymax,alpha=t),fill="red") 
+0

也許地毯劇情添加到情節的邊緣? http://stackoverflow.com/questions/11546256/two-way-density-plot-combined-with-one-way-density-plot-with-selected-regions-in – amzu

回答

2

ggplot將利用geom_rect

這將至少擺脫循環的,如果你滿意的原創情節的力學支持向量?

library(ggplot2) 
set.seed(1) 
(d <- data.frame(cbind(x = sample(1:3, 10, replace = TRUE), y = sample(3:8, 10, replace = TRUE)), fac = sample(1:3, 10, replace = TRUE))) 
ggplot(data=d) + 
geom_rect(aes(xmin=fac-0.4,xmax=fac+0.4,ymin=x,ymax=y),alpha=0.25,fill="red") 

plot

還是你想改變如何計算的透明度,使用不同的實現計數的()?

編輯 - 如果你只是希望阻止了與「數」的指示一格:

library(ggplot2) 
set.seed(1) 
d <- data.frame(cbind(x = sample(1:3, 15, replace = TRUE), 
    y = sample(3:8, 18, replace = TRUE))) 

ggplot(data=d) + 
    geom_tile(aes(x=x,y=y),alpha=0.25,fill="red") 

plot-tile

+0

+1看看你的答案我無法弄清楚爲什麼我首先運行循環。你對這個問題有很好的洞察力。我完全忘了提及透明度部分。我只是將另一列與'aes'中的'alpha'參數關聯起來,這個參數解決了這個問題。任何方式使這是一個連續的情節,而不是每個x類別的矩形? – TheComeOnMan

+0

如果你只是想用透明的方式將x-y網格化,那麼你可以在編輯中使用geom_tile?不知道這是否正是你想要做的,如果它不同,你能基於d來描述嗎? – Troy

+0

不,你不在正確的軌道上。我的意思是說,對於我沒有添加到問題的情節,每個矩形都是一個數據點,因此圖例將該矩形的最低計數值標記爲透明度。但是,圖形實際上具有矩形重疊,並且透明度需要在任何x,y的累積透明度之間變化。任何方式來做到這一點? – TheComeOnMan