【问题标题】:Consistent plot size for pdf-export in ggplot2ggplot2 中 pdf 导出的一致绘图大小
【发布时间】:2021-07-14 09:17:22
【问题描述】:

有人问了类似的问题,但我还没有找到解决我的具体问题的方法。

如何导出相同维度的图?这是我的例子:

来自 mpg 数据集的散点图,在图 1 中具有刻面年份。图 2 是相同的图,但仅包含一年的数据(一个而不是两个刻面)。 我使用 ggsave() 将绘图导出为 .pdf。

library(tidyverse)

p1 <- ggplot(mpg, aes(x = displ, y = cty, color = class))+
  geom_point()+
  facet_wrap(. ~ year) 

p2 <- ggplot(filter(mpg, year == 1999), aes(x = displ, y = cty, color = class))+
  geom_point()+
  facet_wrap(. ~ year) 

ggsave(p1, filename = "p1.pdf")
ggsave(p2, filename = "p2.pdf")

生成的图(在标准 pdf 导出设置下,在本例中为 8.74 x 9.02)如下所示:

p1

p2

各个图保持其线粗、字体大小等,但绘图区域或各个面的大小不会改变,因此条形的宽度也会发生变化。

我了解,我可以调整 pdf 的大小,如下所示:

ggsave(p1, filename = "p1_manual_size.pdf", width = 16, height = 9.02 )
ggsave(p2, filename = "p2_manual_size.pdf", width = 8.74, height = 9.02)

这就是它们的外观:

p1_manual_size

p2_manual_size

这在某些情况下相当有效,但如果情节变得更加复杂(更多方面,图例的不同位置等),维护情节区域将变得非常复杂(并且大多数情况下是不可能的)比率。

那么,问题来了: 是否可以在 ggplot2 中保持绘图的这些比率,以便距离(例如 x 轴元素/刻度之间的距离)保持不变,并且添加的元素越多(x 轴上的值越多),导出的绘图越宽会变成?

如果可以遵循与 GraphPad Prism 相同的逻辑,那就太好了,其中绘图被绘制在 A4 画布的中间,如果有更多的列(和单独的列),它们会变得更大保持相同的宽度)。

不确定我是否很好地表达了这个问题,我希望你能明白我的意思。

非常感谢任何帮助!

最好, 本

【问题讨论】:

    标签: r pdf ggplot2 export data-visualization


    【解决方案1】:

    与此同时,我自己想出了一个解决方案,我很乐意分享:

    我发现 egg-package 的 set_panel_size() 函数可以固定绘图的大小及其各个方面!

    library(tidyverse)
    library(egg)
    
    p1 <- ggplot(mpg, aes(x = displ, y = cty, color = class))+
      geom_point()+
      facet_wrap(. ~ year) 
    
    p2 <- ggplot(filter(mpg, year == 1999), aes(x = displ, y = cty, color = class))+
      geom_point()+
      facet_wrap(. ~ year) 
    
    
    p1_fixed <- set_panel_size(p1, width  = unit(3, "cm"),
                                   height = unit(5, "cm"))
    
    p2_fixed <- set_panel_size(p2, width  = unit(3, "cm"),
                                   height = unit(5, "cm"))
    
    ggsave(p1_fixed, filename = "p1_fixed.pdf", height = 30, width = 21, units = "cm"))
    ggsave(p1_fixed, filename = "p1_fixed.pdf", height = 30, width = 21, units = "cm"))
    
    

    生成的输出如下所示:

    p1_fixed:

    p2_fixed:

    这个过程不是完全自动化的,因为它仍然需要为绘图面板提供宽度和高度,并且如果提供更多的 x 轴条目,它不会自动调整,但它肯定有助于解决我的问题。

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 2015-06-17
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多