首页 > 解决方案 > 如何在 R 中使用 `ggdraw` 和 `plot_grid()` 在一系列绘图中创建 X 和 Y 轴的公共标题?

问题描述

我有一组图,我想为其创建一个常见的 X 轴标题和一个常见的 Y 轴标题。举个例子:

library(ggplot2)
library(cowplot)
library(ggpubr)z
theme_set(theme_cowplot())

df <- data.frame(x = 1:12, y = (1:12)^2)
df$grp = c('Some', 'Things', 'In a legend')

p <- ggplot(df, aes(x, y, color=grp)) + geom_point()
leg <- get_legend(p)
leg <- as_ggplot(leg)
p = p + theme(legend.position = "none")

plot_grid(
  p, p, leg, 
  p, p, leg,
  ncol = 3, rel_widths=c(2,2,1)
)

在此处输入图像描述

经过一番阅读,我发现可以选择使用ggdraw. 但是,我不知道它是如何运作的,我也不知道如何得到我想要的(一个Y在 y 轴,一个X在 x 轴)。以下是我尝试过的:

df <- data.frame(x = 1:12, y = (1:12)^2)
df$grp = c('Some', 'Things', 'In a legend')

p <- ggplot(df, aes(x, y, color=grp)) + geom_point()
leg <- get_legend(p)
leg <- as_ggplot(leg)
p = p + theme(legend.position = "none",axis.title.x =element_blank(),axis.title.y =element_blank()) # I remove x and y titles for the plots

P <-plot_grid(
  p, p, leg, 
  p, p, leg,
  ncol = 3, rel_widths=c(2,2,1)
)
P
P1 <- ggdraw(add_sub(P , "X", vpadding=grid::unit(0.8,"lines"), # With `0.8` I add some space in the X margin.
y=2, x=1, vjust=1, # With `y` and `x` I can indicate the coordinates for my desired text
angle=0) # With this I can change the orientation of the text
)
P1 

在此处输入图像描述

有谁知道如何使用ggdraw或与另一个函数一起创建一个通用的 x 和 y 轴?

标签: rggplot2

解决方案


我认为您只需要先玩一下边距add_sub

P <-plot_grid(
 p, p, leg, 
 p, p, leg,
 ncol = 3, rel_widths=c(2,2,1)
) + theme(plot.margin = margin(30, 30, -50, 50))

P <- add_sub(P, "x axis text", hjust = 1)
P <- add_sub(P, "y axis text", -0.05, 5, angle = 90)
ggdraw(P)

在此处输入图像描述


推荐阅读