Удаление неиспользуемых факторов на панели в гистограмме с вложенными факторами

Некоторое время назад я задал вопроскак удалить неиспользованные факторы в гистограммеи я получил полезное решение этой проблемы, благодаря @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 в заголовках панелей.

Я боролся с этим некоторое время, но безуспешно. Кто-нибудь знает, как этого можно достичь? (По сути, я пытаюсь получить сюжет, похожий на первый, но без промежутков между барами).

Ответы на вопрос(1)

Ваш ответ на вопрос