2014-01-24 4 views
1

안녕하세요R의 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)") 
+4

'temp'를 생성하기 위해 제공 한 코드는 작동하지 않습니다. (복사하여 신선한 R 세션에 붙여 넣어보십시오.) 다른 소스에서'temp'를 얻은 경우'dput (head (temp, 9))'을 수행하여 질문에 붙여 넣어 재사용 가능하게 만드십시오 . –

답변

2

당신의 접근 방식과 주요 문제는 그 panel.abline() 어디 말하는가 있습니다 ... 작동하지 않는 다음 코드를 ... 사용하여 격자 xyplot에 평균 라인을 추가하는 것을 시도하고있다 첫 번째 인수로 수식을 사용합니까? (그렇지 않습니다!) 무엇 ?panel.abline가 말하길 인수가 hv (특히 당신이 염두에두고있는 경우)이고 인수가 h 인 것을 원한다는 것입니다. 또한

주 그린 각 패널에 대한 xy 및 데이터를 포함하는 인자와 xy와 패널 함수를 호출하는격자. 이 작업을 위해 외부 적으로 하위 집합과 집계를 수행 할 필요는 없습니다. 그것은 당신을 위해 이루어집니다. 따라서 패널 기능을 사용하여 그리는 경우 xy으로 생각해야합니다.

이 경우 패널 기능에 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)") 
+0

그러면 y에있는 모든 값에 평균이 추가됩니다. 각 그래프의 평균과 각 그래프의 NoOfAC 값을 찾아야합니다. – Tania

+0

아니요. 너도 해봤 니? 필자는 4 개의 패널을 가진 플롯을 가지고 패널의 y 값을 그린 선이 그려져 있습니다. 이것은 'tempavg'에있는 5 개의 값 중 4 개에 해당합니다. 아마도 당신은 당신의 문제를 충분히 설명하지 않았을 것입니다. 왜 4 패널이 있는가?하지만 5 패널은 'tempavg'를 의미합니까? 당신이 원하는 것을 분명하게 설명하지 않으면 당신을 도울 수 없습니다. –

+0

@Tania 데이터를 전달하려면 '...'을 통해이 작업을 수행 할 수 있지만 현재 사용중인 패널을 찾아야하며 ('? panel.number' 참조) 값을 선택해야합니다 'panel.number()'에 따라'tempavg'에 전달 된 것에서. 그것은 최고의 해킹으로 나를 때린다. 대신,'NoOfAC'가 범주 적으로 취급되고 있다면, 왜 코드로 정의하고 조건을 지정하지 않습니까? 그러면 ** 래티스 **가 더 쉽게 원하는 것을 할 수 있습니다. –

관련 문제