Я создаю специальную тему ggplot, чтобы стандартизировать внешний вид создаваемых мной графиков. Цель более сложная, чем этот минимальный пример, поэтому я ищу общее решение. У меня есть несколько ключевых целей:
- Я хочу, чтобы все графики экспортировались с одинаковым размером (3000 пикселей в ширину, 1500 пикселей в высоту).
- Я хочу контролировать соотношение сторон самой панели сюжета.
- Я хочу использовать textGrobs для включения номеров фигур.
- Я хочу, чтобы изображение было выровнено по левому краю
Проблема, с которой я столкнулся, заключается в том, что при объединении этих двух ограничений изображение, которое сохраняется, центрирует график ggplot внутри окна, что имеет смысл по умолчанию, но в данном случае выглядит плохо.
Я надеюсь, что есть общее решение - выровнять панель ggplot по левому краю при экспорте. В идеале это также будет работать аналогичным образом для фасетных графов.
Кажется, что-то должно быть возможно с использованием одного или некоторого сочетания пакетов gridExtra, gtable, cowplot и egg, но после нескольких часов экспериментов я немного растерялся. Кто-нибудь знает, как я могу это сделать? Мой код приведен ниже.
Это образ, который создается. Как видите, заголовок выровнен по левому краю внизу, но сам ggplot расположен по центру по горизонтали. Я хочу, чтобы график ggplot выровнялся по левому краю.
Вывод графика: https://i.stack.imgur.com/5EM2c.png
library(ggplot2)
# Generate dummy data
x <- paste0("var", seq(1,10))
y <- LETTERS[1:10]
data <- expand.grid(X=x, Y=y)
data$Z <- runif(100, -2, 2)
# Generate heatmap with fixed aspect ratio
p1 <- ggplot(data, aes(X, Y, fill= Z)) +
geom_tile() +
labs(title = 'A Heatmap Graph') +
theme(aspect.ratio = 1)
# A text grob for the footer
figure_number_grob <- grid::textGrob('Figure 10',
x = 0.004,
hjust = 0,
gp = grid::gpar(fontsize = 10,
col = '#01A184'))
plot_grid <- ggpubr::ggarrange(p1,
figure_number_grob,
ncol = 1,
nrow = 2,
heights = c(1,
0.05))
# save it
png(filename = '~/test.png', width = 3000, height = 1500, res = 300, type = 'cairo')
print(plot_grid)
dev.off()