Usuwanie nieużywanych czynników na panel na wykresie słupkowym z zagnieżdżonymi czynnikami

Jakiś czas temu zadałem pytaniejak usunąć nieużywane czynniki na wykresie słupkowymi otrzymałem przydatne rozwiązanie tego problemu dzięki @Aaron. Teraz stoję przed bardzo podobnym problemem, ale rozwiązanie, którego użyłem w przeszłości, nie działa w tym przypadku.

Jest to kod do odtworzenia ramki danych, z której korzystam:

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

Prostym poleceniem wykreślenia tej ramki danych byłoby:

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

Jak widać, wykreślam WARTOŚĆ dla każdej ŁAWKI ograniczonej do każdej możliwej kombinacji EXEC.CFG i CLASS.CFG (to jest to, co mam na myśli z czynnikami zagnieżdżonymi) i używając METRIC do tworzenia grup.

To jest wynik, który otrzymuję:

Nawet jeśli używam „darmowych” skal dla osi X, na wykresie znajdują się (niepotrzebne) przerwy między niektórymi słupkami (np. Międzybench-b ibench-g).

Próbowałem zastosować rozwiązanie, które otrzymałem dla mojego poprzedniego pytania w następujący sposób:

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

I to jest wynik, który otrzymuję:

Jak zauważysz, ten wykres nie jest prawidłowy. Nie uwzględnia zagnieżdżonych czynników, mieszania wartości z CLASS.CFG i EXEC.CFG w tytułach paneli.

Walczę z tym od jakiegoś czasu, ale bez powodzenia. Czy ktoś wie, jak można to osiągnąć? (Zasadniczo to, co próbuję uzyskać, jest fabułą taką jak pierwsza, ale bez przerw między kreskami).

questionAnswers(1)

yourAnswerToTheQuestion