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

当RStudio绘图窗格处于活动状态时,ggsave()中绘图的缩放比例不同,r,plot,ggplot2,rstudio,R,Plot,Ggplot2,Rstudio,我无法提供一个可复制的示例,但我想询问ggsave()函数的一个奇怪行为:我遇到了以下情况: 我创建了一个ggplot,通过将一个plot分配给一个变量,比如说p 我对p进行评估,并且-应该如此-绘图显示在RStudio的绘图窗格中 我的下一个调用是ggsave(plot=p,filename=“plot.pdf”),绘图是 写入plot.pdf,R为我提供控制台上写入的绘图的尺寸 奇怪的是:当RStudio绘图窗格处于活动状态时(即RStudio图形设备处于打开状态),步骤3中由ggsave(

我无法提供一个可复制的示例,但我想询问
ggsave()
函数的一个奇怪行为:我遇到了以下情况:

  • 我创建了一个ggplot,通过将一个plot分配给一个变量,比如说
    p
  • 我对
    p
    进行评估,并且-应该如此-绘图显示在RStudio的绘图窗格中
  • 我的下一个调用是
    ggsave(plot=p,filename=“plot.pdf”)
    ,绘图是 写入plot.pdf,R为我提供控制台上写入的绘图的尺寸
  • 奇怪的是:当RStudio绘图窗格处于活动状态时(即RStudio图形设备处于打开状态),步骤3中由
    ggsave()
    写入的绘图尺寸与没有打开RStudio图形设备时的绘图尺寸不同。因此,已写入绘图的缩放被取消。换句话说:步骤3根据步骤2的执行产生不同的结果。有人知道为什么会这样吗?我认为
    ggsave()
    完全独立于任何RStudio设备。或者这只发生在我的机器上

    这是我的
    sessionInfo()


    扩大安德烈·科利亚丁的上述评论

    从ggsave()文档的宽度、高度以单位(“英寸”)打印大小, “厘米”或“毫米”)。如果未提供,则使用当前图形的大小 装置。”

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

    if (any(is.na(dim))) {
      if (length(grDevices::dev.list()) == 0) {
        default_dim <- c(7, 7)
      }
      else {
        default_dim <- grDevices::dev.size() * scale
      }
    ...
    
    if(任何(is.na(dim))){
    if(长度(grDevices::dev.list())==0){
    
    ggsave()
    documentation'宽度、高度打印大小的默认值(单位为英寸、厘米或毫米)。如果未提供,则使用当前图形设备的大小。'aah!非常感谢…我没有充分阅读文档。感谢您对上述注释进行扩展。这完全有意义!
    if (any(is.na(dim))) {
      if (length(grDevices::dev.list()) == 0) {
        default_dim <- c(7, 7)
      }
      else {
        default_dim <- grDevices::dev.size() * scale
      }
    ...