2012-09-12 21 views
2

我正在嘗試使用條形圖中的條形圖進行繪圖,但我在給定的面板上使用了未使用的因素。我曾嘗試使用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類的基準之間。原因是每個因素只存在於一個給定的類別中,因此它在其他所有類別中都不存在,並且可能在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

理想情況下,我寧願要解決,我以這種方式使用第一種方法(因爲面臨的問題我也會哈在每個面板中都有類名)。但是,如果在第二種情況下,可以爲包含類名的每個子圖添加全局圖例和標題,那也可以。

回答

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) 

工作就像對我的魅力。 祝福!

相關問題