2013-11-21 86 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