少し前に、棒グラフで未使用の要素を削除する方法について質問しました。@ Aaronのおかげで、その問題の有用な解決策を得ることができました。今、私は非常によく似た問題に直面していますが、過去に使用した解決策はこの場合には機能しません。
これは、私が使用しているデータフレームを再現するためのコードです。
set.seed(17)
df <- data.frame(BENCH = sprintf('bench-%s', sort(rep(letters[1:8], 4))),
CLASS.CFG = sprintf('class-%s',
c(rep('C', 4), rep('A', 4), rep('B', 8),
rep('C', 8), rep('A', 4), rep('D', 4))),
EXEC.CFG = rep(c('st', 'st', 'dyn', 'dyn'), 8),
METRIC = rep(c('ipc', 'pwr'), 16),
VALUE = runif(32))
このデータフレームをプロットする簡単なコマンドは次のとおりです。
library(lattice)
barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG, df, groups = METRIC,
scales = list(x = list(rot = 45, relation = 'free')),
auto.key = list(columns = 2))
ご覧のとおり、EXEC.CFGとCLASS.CFGのすべての可能な組み合わせに制約された各BENCHのVALUEをプロットし(ネストされた要素で意味します)、METRICを使用してグループを作成しています。
これは私が得た結果です:
X軸に「フリー」スケールを使用した場合でも、プロットでは、いくつかのバーの間にいくつかの(不要な)ギャップがあります(たとえば、との間bench-b
)bench-g
。
前の質問で得た解決策を次のように適用しようとしました。
pl1 <- barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG,
subset(df, CLASS.CFG == 'class-A'), groups = METRIC,
auto.key = list(columns = 2))
pl2 <- barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG,
subset(df, CLASS.CFG == 'class-B'), groups = METRIC)
pl3 <- barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG,
subset(df, CLASS.CFG == 'class-C'), groups = METRIC)
pl4 <- barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG,
subset(df, CLASS.CFG == 'class-D'), groups = METRIC)
pls <- c(pl1, pl2, pl3, pl4)
pls <- update(pls, scales = list(y = 'same'))
pls
そして、これは私が得た結果です:
お気づきのように、このプロットは正しくありません。パネルタイトルにCLASS.CFGとEXEC.CFGの値が混在しているため、ネストされた要素は尊重されません。
私はしばらくこれと戦ってきましたが、成功しませんでした。誰かがこれをどのように達成できるか知っていますか?(基本的に、私が取得しようとしているのは、最初のプロットのようなプロットですが、バーの間にギャップはありません)。