簡體   English   中英

在不同的axis.title/text屬性的情況下調整面板圖(ggplot)子圖之間的間距

[英]Adjust spacing between subplots of panel figure (ggplot) in case of different axis.title/text properties

當某些圖包含軸標題/標簽而其他圖不包含時,我想使用cowplot package 調整面板中對齊的圖之間的間距。

例子

讓我們創建三個圖:

library(tidyverse)
library(cowplot)

set.seed(123)

df <- data.frame(x = rnorm(n = 100), 
                 y = rnorm(n = 100))

plot <- ggplot(data = df, aes(x, y)) + geom_point()

plot_grid(plot, plot, plot, nrow = 1, align = "vh") 

在此處輸入圖像描述

這些情節完美地對齊,但經常。 我有一個場景,我想創建一個“更干凈”的面板圖。 一種方法是刪除第二個和第三個圖的 y 軸的標題/文本。

像這樣:

plot2 <- plot + theme(axis.title.y = element_blank(),  
                      axis.text.y = element_blank())

plot_grid(plot, plot2, plot2, nrow = 1, align = "vh")

在此處輸入圖像描述

同樣,完美對齊,但第一個和第二個 plot(以及第二個和第三個圖)之間的間距非常大。 我想減少間距以創建更緊湊的 plot,同時軸保持完全相同的尺寸。

預期 output

在此處輸入圖像描述

這可能與cowplot嗎? 還是有其他方法可以做到這一點?

參考github 上的這篇文章plot_grid()默認不添加任何空格,並使用 plot 的邊距。 要刪除 plot 區域之外的空間,可以使用them(plot.margin=...)來刪除。

話雖如此......這不是這里發生的事情! 打印plotplot2將產生沒有邊距的 plot。 看來問題在於在plot_grid()中使用了align=參數。 我不知道為什么,但是將其設置為默認值( align="none" )以外的任何值都會導致繪圖周圍出現額外的空白。 很奇怪...不用說,刪除該論點可以解決您的問題:

使用 align="vh" 的原始代碼

plot_grid(plot, plot2, plot2, nrow = 1, align="vh")

在此處輸入圖像描述

使用 align="none"

plot_grid(plot, plot2, plot2, nrow = 1, align="none")

在此處輸入圖像描述

將根據您的圖形設備添加任何更多空間,因為您獲得的實際 plot 取決於該設備的大小和分辨率。

這是使用patchwork的 package 的解決方案

library(tidyverse)

set.seed(123)

df <- data.frame(x = rnorm(n = 100), 
                 y = rnorm(n = 100))

plot1 <- ggplot(data = df, aes(x, y)) + geom_point()

plot2 <- plot1 + theme(axis.title.y = element_blank(),  
                      axis.text.y = element_blank())

# install.packages("patchwork", dependencies = TRUE)
library(patchwork)

plot1 + plot2 + plot2 +
  plot_layout(ncol = 3) 

代表 package (v0.3.0) 於 2020 年 7 月 24 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM