R语言 如何在一个面板和一个图例中绘制三个ggplot2面板?

dfddblmv  于 2023-04-18  发布在  其他
关注(0)|答案(2)|浏览(225)

如果我有这个shapefile。我想用它的三个图来绘制。

library(terra)
library(ggplot2)
library(tidyterra)
v <- vect(system.file("ex/lux.shp", package = "terra"))
p1=ggplot(v) +
geom_spatvector(aes(fill = NAME_2), color = "grey") +
borders() +
coord_sf(xlim = c(4, 8), ylim = c(49, 49.5))
p2=ggplot(v) +
geom_spatvector(aes(fill = NAME_2), color = "grey") +
borders() +
coord_sf(xlim = c(4, 8), ylim = c(49.5, 50))
p3=ggplot(v) +
geom_spatvector(aes(fill = NAME_2), color = "grey") +
borders() +
coord_sf(xlim = c(4, 8), ylim = c(50, 50.5))

我可以用这个来绘制它们,但我有三个图例。

grid.arrange(p1,p2,p3)

我怎么能只用一个图例来绘制这三个图,但最重要的是所有的图都有相同的尺寸(宽度和高度)。

gzszwxb4

gzszwxb41#

一个选择是切换到patchwork包来合并您的图,这使得使用plot_layout(guides = "collect")合并图例变得容易。

library(terra)
library(ggplot2)
library(tidyterra)

v <- vect(system.file("ex/lux.shp", package = "terra"))
p1 <- p2 <- p3 <- ggplot(v) +
  geom_spatvector(aes(fill = NAME_2), color = "grey") +
  borders()

p1 <- p1 +
  coord_sf(xlim = c(4, 8), ylim = c(49, 49.5))
p2 <- p2 +
  coord_sf(xlim = c(4, 8), ylim = c(49.5, 50))
p3 <- p3 +
  coord_sf(xlim = c(4, 8), ylim = c(50, 50.5))

library(patchwork)

p3 + p2 + p1 +
  plot_layout(ncol = 1, guides = "collect")

y53ybaqx

y53ybaqx2#

另一种方法是ggpubr包中的ggarrange函数。

library(terra)
library(ggplot2)
library(tidyterra)
library(ggpubr)

v <- vect(system.file("ex/lux.shp", package = "terra"))
p1=ggplot(v) +
  geom_spatvector(aes(fill = NAME_2), color = "grey") +
  borders() +
  coord_sf(xlim = c(4, 8), ylim = c(49, 49.5))
p2=ggplot(v) +
  geom_spatvector(aes(fill = NAME_2), color = "grey") +
  borders() +
  coord_sf(xlim = c(4, 8), ylim = c(49.5, 50))
p3=ggplot(v) +
  geom_spatvector(aes(fill = NAME_2), color = "grey") +
  borders() +
  coord_sf(xlim = c(4, 8), ylim = c(50, 50.5))

ggarrange(p3, p2, p1, common.legend = T, legend = "right", nrow = 3)

相关问题