2012-09-12 4 views
2

격자에서 barchart를 사용하여 플롯을 만들려고하지만 주어진 패널에 사용되지 않은 요소에 대해 몇 가지 문제가 있습니다. 나는 drop.unused.levels을 사용해 보았습니다. 그러나 어떤 패널에서도 사용되지 않았을 때만 요소를 떨어 뜨리는 것으로 보입니다. 이 같은막 대형 차트의 패널 당 사용되지 않은 요소 제거

dm <- structure(list(Benchmark = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 
7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 
2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), class = "factor", .Label = c("416.gamess", 
"429.mcf", "436.cactusADM", "458.sjeng", "462.libquantum", "471.omnetpp", 
"482.sphinx3")), Class = structure(c(3L, 1L, 2L, 3L, 1L, 4L, 
2L, 3L, 1L, 2L, 3L, 1L, 4L, 2L, 3L, 1L, 2L, 3L, 1L, 4L, 2L, 3L, 
1L, 2L, 3L, 1L, 4L, 2L, 3L, 1L, 2L, 3L, 1L, 4L, 2L), class = "factor", .Label = c("CS", 
"PF", "PI", "PU")), Config = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), .Label = c("Disabled", 
"Shallowest", "Deepest", "StorePref", "StridedPref"), class = "factor"), 
    Perf = c(1, 0.72, 0.8, 1, 0.32, 1.16, 0.79, 1, 0.98, 1, 1, 
    0.72, 1, 0.99, 1, 0.98, 1, 1, 1.12, 0.97, 1, 1, 0.97, 1, 
    1, 0.99, 0.97, 1, 1, 1.18, 1, 1, 0.99, 0.97, 1)), .Names = c("Benchmark", 
"Class", "Config", "Perf"), row.names = c(NA, -35L), class = "data.frame") 

먼저 내가 사용 시도 된 barchart :

내가 사용하고있는 데이터 프레임

barchart(Perf ~ Benchmark | Class, dm, groups=Config, 
     scales=list(x=list(relation='free')), auto.key=list(columns=3)) 
나에게 다음과 같은 플롯했다

:

bad plot

자세히 알 수 있듯이, PI, PF 및 CS 클래스의 벤치 마크 사이. 그 이유는 각 요소가 주어진 클래스에만 존재하므로 다른 모든 요소에 누락되어 있으며 barchart은 x 축에 간격을 도입 할 수 있기 때문입니다.

내 두 번째 시도는 barchart 네 번 (각 클래스의 하나)를 호출하는 것이 었습니다 :

class.subset <- function(dframe, class.name) { 
    return(dframe[dframe$Class == class.name, ]) 
} 

pl1 <- barchart(Perf ~ Benchmark, class.subset(dm, 'PI'), groups=Config) 
pl2 <- barchart(Perf ~ Benchmark, class.subset(dm, 'PF'),, groups=Config) 
pl3 <- barchart(Perf ~ Benchmark, class.subset(dm, 'CS'),, groups=Config) 
pl4 <- barchart(Perf ~ Benchmark, class.subset(dm, 'PU'),, groups=Config) 

print(pl1, split=c(1, 1, 2, 2), more = TRUE) 
print(pl2, split=c(1, 2, 2, 2), more = TRUE) 
print(pl3, split=c(2, 1, 2, 2), more = TRUE) 
print(pl4, split=c(2, 2, 2, 2)) 

나는 거의 내가 원하는 무엇을 가지고 플롯을하지만, 지금은 하나를 만드는 방법을 모른다 (각 부가 적 줄거리 대신 바로 그 전설의) 모든 줄거리 글로벌 전설 :

이상적으로 almostgood

, 나는 그런 식으로하기 때문에 (첫 번째 방법을 사용하여 직면하고있는 문제를 해결하는 것을 선호 I 또한 ~하겠습니다. 각 패널의 클래스 이름). 그러나 두 번째 경우에는 전역 범례와 클래스 이름을 포함하는 각 서브 플로트의 제목을 추가 할 수 있습니다. 그렇게해도 괜찮습니다.

답변

2

여기 latticeExtra를 사용하여 빠른 방법 :

pl1 <- barchart(Perf ~ Benchmark|Class, class.subset(dm, 'PI'), groups=Config, 
       auto.key=list(columns=3)) 
pl2 <- barchart(Perf ~ Benchmark|Class, class.subset(dm, 'PF'), groups=Config) 
pl3 <- barchart(Perf ~ Benchmark|Class, class.subset(dm, 'CS'), groups=Config) 
pl4 <- barchart(Perf ~ Benchmark|Class, class.subset(dm, 'PU'), groups=Config) 

library(latticeExtra) 
pls <- c(pl1, pl2, pl3, pl4) 
pls <- update(pls, scales=list(y="same")) 
pls 

enter image description here

+0

정확히 내가 필요한 것입니다! 고맙습니다! :) – betabandido

0

난 그냥 95 레벨과 lattice::xyplot의 요소에 같은 문제가되었다. 무엇 나를 위해 일한 것은 (요소가 너무 많은 수준 변수 인 상태)이다

library(gdata) 
    key<-simpleKey(levels(drop.levels(df$factor)),...) 
    xyplot(response~predictor,groups=factor, data=df, key=key) 

나를 위해 마법처럼 일했다.

관련 문제