簡體   English   中英

使用grid.arrange和ggplot調整圖例大小的問題

[英]Problems with legend resizing with grid.arrange and ggplot

我正在嘗試用ggplot2創建一個多面板圖(使用grid.extraegg包)。 其中兩個是箱形圖,第三個是geom_count 喜歡:

f <- ggplot(mpg, aes(drv, cty)) + geom_boxplot()

f2 <- ggplot(mpg, aes(drv, hwy)) + geom_boxplot()

f3 <- ggplot(mpg, aes(drv, class)) + 
      geom_count() + scale_size_area(max_size = 15)

當我嘗試使用以下方式安排它們:

b <- grid.arrange(grobs = lapply(
  list(f, f2, f3),
  set_panel_size,
  width = unit(2, "in"),
  height = unit(2, "in")
), ncol=3)

第三個圖( germ_count圖)的germ_count最終與圖本身一樣大(並且比f3自身繪制時大得多)。 當我使用以下方法保存文件時:

ggsave(filename = dumb.tif, plot = b, width = 7.25, height = 4 )

這些圖最終會以一種看起來不像他們在RStudio圖窗口中那樣的方式重疊。

首先,您的圖例大小由geom_count值決定,這些點大小是絕對的。 因此,使用較小的(2“圖),您的圖例將會非常大。您可以通過調整scale_size_area max_size來解決此scale_size_area ,或者只是使圖更大,以使相對繪圖尺寸更小。

其次, set_panel_size設置面板 (繪圖區域)大小,但是當您包含軸,文本,圖例等時,實際繪圖會更大。因此,當您嘗試將它們塞入7.25“寬區域時,2”面板會導致重疊的圖形。 另外f3 ,帶有2“面板,因為它包含一個圖例,所以會更寬。但是當你使用ncol = 3時,你的grid.arrange調用默認使所有的圖形寬度相同。你需要使用widths來使列不同寬度。

把它們放在一起:

library(ggplot2)
library(grid.extra)
library(egg)

f <- ggplot(mpg, aes(drv, cty)) + geom_boxplot()

f2 <- ggplot(mpg, aes(drv, hwy)) + geom_boxplot()

f3 <- ggplot(mpg, aes(drv, class)) + 
    geom_count() + scale_size_area(max_size = 15)

b <- grid.arrange(grobs = lapply(
    list(f, f2, f3),
    set_panel_size,
    width = unit(3, "in"),
    height = unit(3, "in")
), widths =c(2,2,3), ncol=3)

ggsave(filename = "dumb.png", plot = b, width = 12, height = 4)

在此輸入圖像描述

egg::ggarrange()目前存在寬度和高度問題(疏忽,我只測試了相對寬度/高度的情況,網格單元總是欺騙我這種或那種方式)。 使用dev版本,你可以做,

library(egg)
g <- ggarrange(f, f2, f3, nrow=1, 
               widths = rep(unit(2,"in"), 3), 
               heights = unit(2,"in"))

margin <- unit(1,"line")
ggsave('dumb.pdf', plot=g, 
       width = grid::convertWidth(sum(g$widths) + margin, 
                                  unitTo = "in", valueOnly = TRUE),
       height = grid::convertHeight(sum(g$heights) + margin,  
                                    unitTo = "in", valueOnly = TRUE))

在此輸入圖像描述

傳奇的大小是絕對的; 這是ggplot2中的設計選擇。 您可以調整主題中的一些參數以使間距和一些邊距更小。

試試這樣:

combined_plot <- arrangeGrob(p1, p2, p3, widths = c(2,2,3), heights = c(2,2,2), ncol = 3)

ggsave(filename = combined.png, plot = combined_plot, width = 7.25, height = 4 )

arrange.grob()不做任何對象賦值。 arrangeGrob()可以,所以你可以ggsave()輸出對象。 不需要lapply() widths以矢量而不是整體寬度給出。 將它們視為一組比例寬度。 可以使用ggsave()設置總圖寬度/高度。

暫無
暫無

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

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