如何使用特定的咒语实现重叠的、成面的lattice::histogram
,并且保证公共断点(跨组但可能在各面板上有所不同)?
例如,假设我希望每个面板中数据的总范围(合并后的组)被分成30个区间。
示例数据:
library(lattice)
set.seed(1)
d <- data.frame(v1=rep(c('A', 'B'), each=1000),
v2=rep(c(0.5, 1), each=2000),
mean=rep(c(0, 10, 2, 12), each=1000))
d$x <- rnorm(nrow(d), d$mean, d$v2)
使用 nint=30
?
p1 <- histogram(~x|v1, d, groups=v2, nint=30,
scales=list(relation='free'), type='percent',
panel = function(...) {
panel.superpose(..., panel.groups=panel.histogram,
col=c('red', 'blue'), alpha=0.3)
})
p1
上面的内容中,不同组之间的箱子是一致的,但是(1)x轴的限制在面板之间是共享的(当x轴范围在面板之间有很大差异时会出现问题——我真的希望每个面板都可以单独计算30个箱子),并且(2)使用type='percent'
时y轴会很挤(应该扩展更远)。
使用breaks=30
?
p2 <- histogram(~x|v1, d, groups=v2, breaks=30,
scales=list(relation='free'), type='percent',
panel = function(...) {
panel.superpose(..., panel.groups=panel.histogram,
col=c('red', 'blue'), alpha=0.3)
})
p2
现在轴限制看起来不错,但是组之间的箱子宽度不同。那么...
使用
lattice
,我如何实现重叠的面板直方图,在面板内部分组具有恒定的箱子宽度,但轴限制适合每个面板的数据?(我知道ggplot是一个选项,但我希望图形风格与我的其他lattice图形保持一致。)
nint=30
而不是breaks=30
。这样做是否符合您的要求? - MrFlicknint=30
。问题是它似乎不尊重x轴的'relation ='free'',而且我想扩展y限制(虽然使用type ='count'可以解决后者,如果我这样做,我可以重新标记轴刻度)。 - jbaums