Wadą rozwiązań opartych na grid.arrange
tym, że utrudniają oznaczanie działek literami (A, B itp.), Jak wymaga większość czasopism.
Napisałem pakiet cowplot , aby rozwiązać ten (i kilka innych) problemów, w szczególności funkcję plot_grid()
:
library(cowplot)
iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot() + theme_bw()
iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
geom_density(alpha = 0.7) + theme_bw() +
theme(legend.position = c(0.8, 0.8))
plot_grid(iris1, iris2, labels = "AUTO")
Obiekt, który plot_grid()
wraca to kolejny obiekt ggplot2, można zapisać go ggsave()
jak zwykle:
p <- plot_grid(iris1, iris2, labels = "AUTO")
ggsave("plot.pdf", p)
Alternatywnie możesz użyć funkcji cowplot save_plot()
, która jest cienkim owinięciem wokół ggsave()
, co ułatwia uzyskanie prawidłowych wymiarów dla połączonych wykresów, np .:
p <- plot_grid(iris1, iris2, labels = "AUTO")
save_plot("plot.pdf", p, ncol = 2)
( ncol = 2
Argument mówi, save_plot()
że istnieją dwa wykresy obok siebie i save_plot()
sprawia, że zapisany obraz jest dwukrotnie szerszy.)
Bardziej szczegółowy opis układania wykresów w siatce znajduje się w tej winiecie. Istnieje również winieta wyjaśniająca, jak tworzyć fabuły ze wspólną legendą.
Często mylone jest to, że pakiet cowplot zmienia domyślny motyw ggplot2. Pakiet zachowuje się w ten sposób, ponieważ został pierwotnie napisany do użytku wewnętrznego w laboratorium i nigdy nie używamy domyślnego motywu. Jeśli powoduje to problemy, możesz zastosować jedno z następujących trzech podejść, aby je obejść:
1. Ustaw motyw ręcznie dla każdej działki. Myślę, że dobrą praktyką jest zawsze określanie konkretnego tematu dla każdej fabuły, tak jak to zrobiłem+ theme_bw()
w powyższym przykładzie. Jeśli określisz konkretny motyw, domyślny motyw nie ma znaczenia.
2. Przywróć domyślny motyw z powrotem do domyślnego ggplot2. Możesz to zrobić za pomocą jednego wiersza kodu:
theme_set(theme_gray())
3. Wywołaj funkcje cowplot bez dołączania pakietu. Nie można również wywoływać library(cowplot)
lub require(cowplot)
zamiast tego wywoływać funkcje cowplot, przygotowując cowplot::
. Na przykład powyższy przykład wykorzystujący domyślny motyw ggplot2 wyglądałby następująco:
## Commented out, we don't call this
# library(cowplot)
iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot()
iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
geom_density(alpha = 0.7) +
theme(legend.position = c(0.8, 0.8))
cowplot::plot_grid(iris1, iris2, labels = "AUTO")
Aktualizacje:
- Od wersji Cowplot 1.0 domyślny motyw ggplot2 nie jest już zmieniany.
- Począwszy od ggplot2 3.0.0, wykresy można bezpośrednio oznaczać, patrz np . Tutaj.