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))

それは私に次のプロットを与えました:

悪いプロット

ご覧のとおり、PI、PF、および CS クラスのベンチマーク間にギャップがあります。その理由は、各因子が特定のクラスにのみ存在するため、他のすべての因子には存在せずbarchart、x 軸にギャップが生じる可能性があるためです。

私の 2 回目の試みは、barchart4 回呼び出すことでした (各クラスに 1 回)。

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))

私が得たプロットはほとんど私が望むものですが、今ではすべてのサブプロットに対して単一のグローバル凡例を作成する方法がわかりません(各サブプロットのまったく同じ凡例ではなく):

大体良い

理想的には、最初のアプローチを使用して直面している問題を解決したいと思います (そのようにすると、各パネルにクラス名も表示されるため)。ただし、2 番目のケースで、クラス名を含むサブプロットごとにグローバルな凡例とタイトルを追加できる場合は、それも問題ありません。

4

2 に答える 2

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

ここに画像の説明を入力

于 2012-09-13T15:26:57.793 に答える
0

95 レベルの因子とlattice::xyplot. 私にとってうまくいったのは(因子がレベルが多すぎる変数である場合):

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

私にとって魅力のように働きました。幸運をお祈りしています!

于 2015-08-28T14:48:50.247 に答える