我想打印带有分组点和线的lattice::xyplot,但是对于每个组中的许多单个y值,我都有多个x值。我想要打印一条分段的线,以便对于每个x值,它通过每个组中相关y值的平均值。

这是一个例子:

使用此数据:

set.seed(1)
d <- data.frame(x=sample(6, 20, replace=TRUE), y=rnorm(20), g=factor(sample(2, 20, replace=TRUE)))
# Shift one group
d$y[d$g==2] = d$y[d$g==2] + 5

我转移了一组,所以线条在视觉上更具吸引力。

散点图如下所示:
xyplot(y ~ x, data=d, groups=g)

r - 格子图-通过y值的平均值添加线-LMLPHP

仅仅添加行真是一团糟:
xyplot(y ~ x, data=d, groups=g, type=c('p','l'))

r - 格子图-通过y值的平均值添加线-LMLPHP

如果对x值进行排序会更好一些,但仍然不是我想要的:
xyplot(y ~ x, data=d[order(d$x),], groups=g, type=c('p','l'))

r - 格子图-通过y值的平均值添加线-LMLPHP

最佳答案

我将使用panel.superpose,然后在组面板功能中进行聚合。例如

xyplot(y ~ x, data=d, groups=g, panel=function(...) {
    panel.xyplot(...);
    panel.superpose(..., panel.groups=function(x, y, col.line, ...) {
        dd <- aggregate(y~x, data.frame(x,y), mean)
        panel.xyplot(x=dd$x, y=dd$y, col=col.line, type="l")
    })
})

这导致

r - 格子图-通过y值的平均值添加线-LMLPHP

08-24 12:26