带有分组回归线的叠加xyplot面板

时间:2013-01-06 18:57:22

标签: r lattice

我想在格子中的单个面板上叠加多个组,并且想要独立的回归线。

通过使用条件因子获得多个面板非常容易,每个面板都有一个回归线:

xyplot(
  Petal.Width  ~ Petal.Length | Species,
  data = iris,
  panel = function(x, y, ...) {
    panel.xyplot(x, y, ...)
    panel.abline(lm(y~x), col='#0080ff')
  },
  grid = TRUE
)

enter image description here

在叠加的xyplot中为所有点打印单个回归也相当容易:

xyplot(
  Petal.Width ~ Petal.Length,
  data = iris,
  groups = Species,
  panel = function(x, y, ...) {
    panel.xyplot(x, y, ...)
    panel.abline(lm(y~x))
  },
  grid = TRUE,
  auto.key = list(title='Species', space='right')
)

enter image description here

但这不是我需要的。我会回答这个问题,但看起来很混乱。也许这只是野兽的本性。

我正在寻找更容易理解的东西。格子是首选,但也可以接受良好的ggplot解决方案。如果不清楚,我正在制作供Excel用户使用的图。

3 个答案:

答案 0 :(得分:7)

以下是我提出的建议:

xyplot(
  Petal.Width  ~ Petal.Length,
  groups = Species,
  data = iris,
  panel = function(x, y, ...) {
    panel.superpose(x, y, ...,
                    panel.groups = function(x,y, col, col.symbol, ...) {
                      panel.xyplot(x, y, col=col.symbol, ...)
                      panel.abline(lm(y~x), col.line=col.symbol)
                    }
    )
  },
  grid = TRUE,
  auto.key = list(title='Species', space='right')
)

enter image description here

答案 1 :(得分:7)

您可以让莱迪思使用类型参数为您执行面板操作

xyplot(Petal.Width  ~ Petal.Length, groups = Species, data = iris, 
     type = c('p','r','g'),  
     auto.key = list(title='Species', space='right'))

答案 2 :(得分:3)

似乎你可以将其简化为

xyplot(
  Petal.Width  ~ Petal.Length,
  groups = Species,
  data = iris,
  panel = panel.superpose, # must for use of panel.groups
  panel.groups=function(x, y, col, col.symbol, ...) {
                      panel.xyplot(x, y, col=col.symbol, ...)
                      panel.lmline(x, y, col.line=col.symbol)
  },
  grid = TRUE,
  auto.key = list(title='Species', space='right')
)