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