寻找一种更简洁的制作浮动条形图的方法,该方法显示按因子划分的事件的时间和持续时间(参见克利夫兰的图形数据元素,图2.4)。以下格子代码完成了工作,但很笨重。有更直接的方法吗?
library(lattice)
set.seed(1)
x = sort(unique(sample(1:1000, 40)))
z <- data.frame(x = x, state = c("on", "off"))
z2 <- data.frame(on = z[z$state=="on", ]$x,
off = z[z$state=="off", ]$x)
# needed for panel.rect
z2$mp <- with(z2, (on+off)/2) # x-midpoint
z2$w <- with(z2, off-on) # x-width
z2$lab <- rep(factor(c("a", "b", "c", "d")), 5)
xyplot(lab ~ on + off + mp + w, z2,
panel = function(x, y, subscripts, groups, ...){
panel.rect(y = y[subscripts],
x = x[subscripts[groups=="mp"]],
width = x[subscripts[groups=="w"]],
height = 0.5, ...)
})
具体来说,需要公式lab ~ on + off + mp + w
来为面板功能提供必要的点,而需要on + off
个变量来自动调整图的大小。如果面板功能不需要知道特定的变量名,我会更喜欢这个。
如果清洁器解决方案使用条件变量,最好采用以下形式的加值点:lab ~ on + off | cvar
。