我有一个“长”数据框定义为:
q <- data.frame(Indicator.Code=factor(),Year=numeric(),Value=numeric())
我试图在单个xyplot中绘制每年不同Indicator.Code
的值作为年份函数的值,如下所示
xyplot( Value~Year,data=q,group=Indicator.Code)
到目前为止,这么好。现在我正在尝试添加与线性回归相对应的行
rlm(q$Value[q$Indicator.Code==a]~q$Year[q$Indicator.Code==a])
表示Indicator.Code
的所有值。
我不知道怎么做。添加回归线的常用方法,即
xyplot( Value~Year,data=q,group=Indicator.Code),
panel = function(x, y) {
panel.xyplot(x, y)
panel.abline(rlm(y ~ x))
}))
无法正常工作(它计算单个回归,并为整个数据集添加单个回归线)。此外,我已经计算了回归(我也需要它们用于图形以外的东西),并且讨厌必须重新计算它们的想法。
任何新手都可以提示吗?
答案 0 :(得分:2)
我是ggplot2
瘾君子:)。 ggplot2
中的等价物符合您的期望:
library(ggplot2)
ggplot(q, aes(x = Year, y = Value, color = Indicator.Code)) +
geom_point() + stat_smooth(method = "rlm")
请注意,我相信您将任何函数传递为method
,但如果没有可重现的示例,则很难检查。
答案 1 :(得分:2)
对于为每个group
绘制单独符号的自定义面板函数,晶格要求您在调用panel.superpose()
时包装实际的面板函数。这是一个示例,使用mtcars
data.frame中的数据。
library(lattice)
library(MASS)
myPanel <- function(x,y,...) {
panel.xyplot(x,y,...)
panel.abline(rlm(y~x), ...)
}
xyplot(mpg~disp, group = cyl, data = mtcars,
panel = function(...) panel.superpose(panel.groups = myPanel, ...))
## Or, equivalently:
xyplot(mpg~disp, group = cyl, data = mtcars,
panel = panel.superpose, panel.groups = myPanel)