Удаление неиспользуемых факторов на панели в гистограмме с вложенными факторами
Некоторое время назад я задал вопроскак удалить неиспользованные факторы в гистограммеи я получил полезное решение этой проблемы, благодаря @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))
Как вы можете видеть, я строю VALUE для каждого BENCH, ограниченного каждой возможной комбинацией EXEC.CFG и CLASS.CFG (что я имею в виду с помощью вложенных факторов), и использую 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 в заголовках панелей.
Я боролся с этим некоторое время, но безуспешно. Кто-нибудь знает, как этого можно достичь? (По сути, я пытаюсь получить сюжет, похожий на первый, но без промежутков между барами).