【问题标题】:Scaling of plot in ggsave() different when RStudio plot pane is active当 RStudio 绘图窗格处于活动状态时,ggsave() 中绘图的缩放比例不同
【发布时间】:2018-01-31 18:47:33
【问题描述】:

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

  1. 我创建了一个 ggplot,通过将绘图分配给一个变量,比如说p
  2. 我评估 p 并且 - 应该如此 - 绘图显示在 RStudio 的绘图窗格中。
  3. 我的下一个电话是ggsave(plot = p, filename = "plot.pdf"),剧情是 写入 plot.pdf 和 R 给我控制台上书面情节的尺寸。

奇怪的是:当 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

【问题讨论】:

  • 来自 ggsave() 文档 'width, height 以单位(“in”、“cm”或“mm”)为单位的绘图大小。如果未提供,则使用当前图形设备的大小。'
  • 啊啊!非常感谢……我没有仔细阅读文档。

标签: r plot ggplot2 rstudio


【解决方案1】:

扩展 Andrey Kolyadin 的上述评论...

来自 ggsave() 文档 'width, height 绘图大小以单位(“in”, “厘米”或“毫米”)。如果未提供,则使用当前图形的大小 设备。'

如果我们深入研究ggsave 背后的代码,会有一个 sn-p 说:

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)。

RStudio 的绘图窗格是一个图形设备。所以ggsave 的行为会根据那里是否有任何东西而有所不同。

【讨论】:

  • 感谢您扩展上述评论。这完全有道理!
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 2016-10-30
  • 1970-01-01
  • 2013-07-24
相关资源
最近更新 更多