我正在尝试使用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
)
}
有什么建议吗?我更喜欢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 :(得分: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")
或者您是否想要使用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")