颜色编码的Boxplot

时间:2013-11-21 18:26:26

标签: r ggplot2 boxplot density-plot

我正在尝试使用ggplot通过颜色/透明度创建伪boxplot,但我正在努力一点。这个想法是,对于x轴上的任何点,特定y值出现的次数越多,(x,y)点应该越暗。为了增加复杂性,我没有计算每个(x,y),而是我有(x , ymin:ymax)的计数,这意味着这个计数适用于(x,ymin)和(x)之间的所有点。的x,YMAX)

搜索似乎有点棘手,我无法发掘任何我可以使用的东西。我自己最接近的是如下所示,但是对于较大的数据集,这需要很长时间。

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

1 个答案:

答案 0 :(得分: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

或者您是否想要使用count()的不同实现来更改透明度的计算方式?

编辑 - 如果您只想阻止带有“计数”指示的网格:

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