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

时间:2016-02-29 00:13:54

标签: r lattice

我想打印带有分组点和线的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)

enter image description here

添加线条真是一团糟:

xyplot(y ~ x, data=d, groups=g, type=c('p','l'))

enter image description here

如果您对x值进行排序,但仍然不是我想要的,那会好一点:

xyplot(y ~ x, data=d[order(d$x),], groups=g, type=c('p','l'))

enter image description here

2 个答案:

答案 0 :(得分:5)

我会使用length(v)然后在组面板功能中进行聚合。例如

if

这导致

enter image description here

答案 1 :(得分:0)

xyplot(y ~ x, data=d, groups=g,
       panel = function(x, y, subscripts, groups, ...) {     
         grp <- as.numeric(groups[subscripts])
         col <- trellis.par.get()$superpose.symbol$col
         panel.xyplot(x, y, subscripts=subscripts, groups=groups, ...)
         for (g in unique(grp)) {
           sel <- g == grp
           m   <- aggregate(list(y=y[sel]), list(x=x[sel]), FUN=mean)
           panel.lines(m$x, m$y, col=col[g])
         }
       }
)

enter image description here

那么这里发生了什么? subscripts是每个面板的下标列表。在我的小例子中没有条件,所以它是1:20。同样,groups是面板的组列表。同样,有一个面板,所以这是d$g

grp则是其因子中每个组的索引。

col是一组颜色,在panel.lines函数中编制索引,以选择与点相同的颜色。

对于每个组,计算该组中每个x值的平均值,并将其传递给坐标的panel.lines