如何在R中的xyplot中添加平均线?
嗨,我正在尝试使用以下代码向晶格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
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)你是圣人!如果你现在在这里,我会给你一个大大的拥抱