To może przede wszystkim wynikać z mojego niezrozumienia, jak działa panel.margin = unit(...)
w funkcji theme()
... ale nie mogę dostosować marginesów w facja_wrap tak, jakbym chciał. Zasadniczo chcę, aby facet_grid wyglądał w ten sposób, z tekstem aspektu (tj. strip.text
) wstawionym w każdym elemencie i bez spaczania między poszczególnymi aspektami:W ggplot2 i facet_wrap, jak usunąć wszystkie marginesy i dopełnienie, ale zachować strip.text?
(Zostawiłem w różowych obramowaniach, aby pokazać wymiary każdego aspektu)
więc oto kod do tej pory.
Konfiguracja danych i wykresu:
library(ggplot2)
library(grid)
p <- ggplot() +
geom_bar(data = mtcars, aes(x = cyl, y = qsec), stat = 'identity') +
facet_wrap(~ carb, ncol = 3)
mytheme <- theme_minimal() + theme(
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
panel.margin = unit(0, "lines"),
panel.border = element_rect(colour = rgb(1.0, 0, 0, 0.5), fill=NA, size=1)
)
Standardowe wykres
p + mytheme
wyjmowanie strip.text całkowicie
p + mytheme + theme(strip.text = element_blank())
Dodanie strip.text i insetting to
p + mytheme +
theme(strip.text = element_text(size = rel(3.0), vjust = -4.0))
Ponowne inkluzyjnego strip.text (i zwiększony rozmiar względna) zwiększa margines pionie pomiędzy dwoma rzędami. W tym momencie nie wiem, jak zamknąć pionową lukę między górnym i dolnym rzędem.
Zbyt dużo ujemny marginesp + mytheme +
theme(strip.text = element_text(size = rel(3.0), vjust = -4.0),
panel.margin = unit(c(-2, -2), "lines"))
Więc jak mam kierować tylko panel.margin pomiędzy dwoma rzędami?
Edytuj: Dodatkowe informacje. Przestrzeń pomiędzy rzędami wydaje się być strip.background
:
p + mytheme +
theme(strip.text = element_text(size = rel(3.0), vjust = -4.0),
panel.margin = unit(-1, "lines"),
strip.background = element_rect(fill = rgb(0, 1.0, 0, 0.2)))
Jeśli używasz 'panel.margin.y = jednostka (-2, "linie") ', zmniejszasz tylko odstęp między wierszami. Czy tego właśnie szukałeś, czy było coś jeszcze? – maj
@maj ... to ... nie może być takie proste ... ale tak było. Chyba przegapiłem to gdzieś w dokumentacji. Czy możesz odrzucić swój komentarz jako odpowiedź, abym mógł go zaakceptować? –
@maj w moim systemie Potrzebuję 'panel.margin.y = unit (-0.5," lines ")', aby uzyskać pożądany wynik – Jaap