如何在R中的xyplot中添加平均线?

如何在R中的xyplot中添加平均线?,r,lattice,R,Lattice,嗨,我正在尝试使用以下代码向晶格xyplot添加平均线。。。这不管用 library(lattice) temp <- data.frame(c(1,1,1,1,1,1,2,2), c(1,1,2,2,1,1,1,1), c(1,1,1,2,1,2,1,2), c(0,0,0,150,150,0,0,0), c(3,10,4,15,14,2,4,5)) names(temp) <- c("instNo","NoOfAC","NoRele

嗨,我正在尝试使用以下代码向晶格xyplot添加平均线。。。这不管用

library(lattice)
temp <- data.frame(c(1,1,1,1,1,1,2,2),
      c(1,1,2,2,1,1,1,1),
      c(1,1,1,2,1,2,1,2),
      c(0,0,0,150,150,0,0,0),
      c(3,10,4,15,14,2,4,5))
names(temp) <- c("instNo","NoOfAC","NoReleaseLevels","trExt","maxDelay")

tempavg <- aggregate(temp[5], by=list(temp$NoOfAC,temp$NoReleaseLevels
                                  ,temp$trExt),FUN = mean)

names(tempavg) <- c("NoOfAC","NoReleaseLevels","trExt","meanDelay")
xyplot(maxDelay ~ NoOfAC |trExt + NoReleaseLevels,
             data = temp,
             panel = function(x, y, tempavg) {
               panel.xyplot(x, y)
               panel.abline(tempavg$meanDelay ~ y |trExt + NoReleaseLevels)
             },
xlab = "Number Of Aircraft in the Instance",
ylab = "Total Delay (minutes)")
库(晶格)

temp您的方法的主要问题是,它在哪里说
panel.abline()
将公式作为其第一个参数?(它不是!)panel.abline所说的是,它接受参数
h
v
(特别是对于您想到的情况),您需要参数
h

还请注意,lattice使用参数
x
y
调用面板函数,其中包含绘制的每个面板的
x
y
数据。您不需要为这项工作在外部进行子集和聚合;这是为你做的。因此,在使用面板函数进行绘图时,需要考虑
x
y

在这种情况下,您希望在panel函数中使用
panel.abline(h=mean(y),…)
允许传递给面板函数的额外参数向下传播到面板函数内的函数调用。因此,匿名面板函数还需要采用
参数。如下所示

## code as factor
temp <- transform(temp, NoOfAC = factor(NoOfAC))

## plot
xyplot(maxDelay ~ NoOfAC |trExt + NoReleaseLevels,
             data = temp,
             panel = function(x, y, ...) {
               panel.xyplot(x, y, ...)
               panel.linejoin(x, y, horizontal = FALSE, ...)
             },
       xlab = "Number Of Aircraft in the Instance",
       ylab = "Total Delay (minutes)")
##代码作为因子

temp您提供的用于创建
temp
的代码甚至无法正常工作。(试着复制并粘贴到一个新的R会话中查看。)如果你有来自其他来源的
temp
,可以做
dput(head(temp,9))
,并将其粘贴到你的问题中以使其可复制。这将平均值添加到y中的所有值中。我需要它来找到每个图的平均值,以及每个图中每个单独的NoOfAC值的平均值。你试过了吗?我有一个包含4个面板的绘图,在面板平均值
y
处绘制了一条线。这对应于
tempavg
中5个值中的4个。也许您还没有充分解释您的问题-为什么
tempavg
中有4个面板,但有5个means?如果你没有清楚地解释你想要什么,就很难帮助你。@Tania如果你想传入数据,那么你可以通过
,但是你必须计算出你在哪个面板上(参见
?panel.number
),然后根据
panel.number()
从传入的
tempavg
中选择值。我觉得这充其量只是一个黑客。相反,如果
NoOfAC
被视为分类的,为什么不将其编码为分类的,并对其设置条件?莱迪思可能更容易做你想做的事。是的,我试过了。对不起,我的问题不清楚。该图包含4个单独的图。我试图在每一个例子中,在“NoOfAC”等于1的例子的平均值和“NoOfAC”等于2的例子的平均值之间画一条线。例如,在第二排的第一个图中,将有一条线连接(1,8.5)和(2,4)你是圣人!如果你现在在这里,我会给你一个大大的拥抱