我想在格子中的单个面板上叠加多个组,并且想要独立的回归线。
通过使用条件因子获得多个面板非常容易,每个面板都有一个回归线:
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
)
在叠加的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')
)
但这不是我需要的。我会回答这个问题,但看起来很混乱。也许这只是野兽的本性。
我正在寻找更容易理解的东西。格子是首选,但也可以接受良好的ggplot解决方案。如果不清楚,我正在制作供Excel用户使用的图。
答案 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')
)
答案 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')
)