当RStudio绘图窗格处于活动状态时,ggsave()中绘图的缩放比例不同

时间:2017-08-23 09:07:33

标签: r plot ggplot2 rstudio

我无法为此提供可重现的示例,但我想问一下ggsave()函数的奇怪行为:我遇到以下情况:

  1. 我创建了一个ggplot,通过为变量指定一个图表,让我们说p
  2. 我评估p和 - 应该是 - 情节显示在RStudio的情节面板中。
  3. 我的下一个电话是ggsave(plot = p, filename = "plot.pdf"),情节是 写入plot.pdf和R给出了控制台上书面图的尺寸。
  4. 奇怪的是:当RStudio绘图窗格处于活动状态时(即RStudio图形设备处于打开状态),步骤3中ggsave()写入的绘图尺寸与没有打开RStudio图形设备时的尺寸不同。因此,书面情节的缩写是关闭的。换句话说:步骤3根据步骤2的执行产生不同的结果。有谁知道为什么会这样?我认为ggsave()完全独立于任何RStudio设备。或者这只发生在我的机器上?

    这是我的sessionInfo()

    R version 3.4.1 (2017-06-30)
    Platform: x86_64-apple-darwin15.6.0 (64-bit)
    Running under: macOS Sierra 10.12.6
    
    Matrix products: default
    BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
    LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
    
    locale:
    [1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8
    
    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     
    
    other attached packages:
    [1] ggplot2_2.2.1     scales_0.4.1      data.table_1.10.4
    
    loaded via a namespace (and not attached):
     [1] ggrepel_0.6.12     Rcpp_0.12.12       digest_0.6.12      grid_3.4.1         plyr_1.8.4         gtable_0.2.0       rlang_0.1.2        lazyeval_0.2.0    
     [9] labeling_0.3       RColorBrewer_1.1-2 tools_3.4.1        munsell_0.4.3      compiler_3.4.1     colorspace_1.3-2   sciplot_1.1-1      tibble_1.3.3
    

1 个答案:

答案 0 :(得分:2)

扩展安德烈·科利亚丁的评论......

  

来自ggsave()文档'宽度,高度绘图大小(单位为" in",   " cm",或" mm")。如果未提供,则使用当前图形的大小   。装置'

如果我们深入研究ggsave背后的代码,那么会有一段代码:

if (any(is.na(dim))) {
  if (length(grDevices::dev.list()) == 0) {
    default_dim <- c(7, 7)
  }
  else {
    default_dim <- grDevices::dev.size() * scale
  }
...

这意味着如果用户未指定尺寸:

  1. 如果根本没有活动的图形设备,默认尺寸为7 x 7;

  2. 如果有至少一个活动图形设备,请使用最后一个的尺寸(乘以scale,默认为1)。

  3. RStudio的绘图窗格是一个图形设备。因此ggsave的行为会有所不同,具体取决于是否存在任何内容。