Одним із недоліків рішень, заснованих на grid.arrange
тому, що вони ускладнюють маркування сюжетів літерами (A, B тощо), як цього вимагає більшість журналів.
Я написав пакет ковпаків, щоб вирішити цю (та кілька інших) проблем, зокрема функцію 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")
Об'єкт, який plot_grid()
повертається, є ще одним об’єктом ggplot2, і ви можете зберегти його за допомогою ggsave()
звичайного:
p <- plot_grid(iris1, iris2, labels = "AUTO")
ggsave("plot.pdf", p)
Крім того, ви можете скористатися функцією коров'ячої труби save_plot()
, яка являє собою тонку обгортку, ggsave()
яка полегшує отримання правильних розмірів для комбінованих ділянок, наприклад:
p <- plot_grid(iris1, iris2, labels = "AUTO")
save_plot("plot.pdf", p, ncol = 2)
( ncol = 2
Аргумент говорить про save_plot()
те, що є два графіки поруч і save_plot()
робить збережене зображення вдвічі ширшим.)
Більш детальний опис того, як розташувати ділянки в сітці див цій віньєтці. Також є віньєтка, яка пояснює, як зробити сюжети із спільною легендою.
Однією з частих проблем плутанини є те, що пакет cowplot змінює тему ggplot2 за замовчуванням. Пакет поводиться так, тому що він був спочатку написаний для внутрішнього використання в лабораторії, і ми ніколи не використовуємо тему за замовчуванням. Якщо це спричинить проблеми, ви можете скористатися одним із наступних трьох підходів, щоб вирішити їх:
1. Встановіть тему вручну для кожного сюжету.Я думаю, що це завжди добре вказувати певну тему для кожного сюжету, як я робив + theme_bw()
у прикладі вище. Якщо ви вказали певну тему, тема за замовчуванням не має значення.
2. Поверніть тему за замовчуванням назад до програми за замовчуванням ggplot2. Це можна зробити за допомогою одного рядка коду:
theme_set(theme_gray())
3. Зателефонуйте до функцій ковзани, не додаючи пакет. Ви також не можете зателефонувати library(cowplot)
або require(cowplot)
замість цього зателефонувати до функцій ковзани, попередньо попередньо cowplot::
. Наприклад, наведеним вище прикладом із використанням теми за замовчуванням ggplot2 стане:
## 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")
Оновлення:
- Як і для cowplot 1.0, тема ggplot2 за замовчуванням більше не змінюється.
- За станом на ggplot2 3.0.0, ділянки можна позначати безпосередньо, див. Наприклад, тут.