创建一个特定大小的绘图窗口

82

我如何创建一个指定宽度和高度(以像素等为单位)的新屏幕 R 绘图窗口?

4个回答

87

请使用dev.new()。(参见这个相关问题。)

plot(1:10)
dev.new(width=5, height=4)
plot(1:20)
更具体地说,使用哪些单位:
dev.new(width=5, height=4, unit="in")
plot(1:20)
dev.new(width = 550, height = 330, unit = "px")
plot(1:15)

编辑(2020年5月)为RStudio增加附加参数,(感谢用户Soren Havelund Welling

对于RStudio,请添加dev.new(width=5,height=4,noRStudioGD = TRUE)


2
我认为这些单位不是像素。我尝试了这个例子,结果我的系统冻结了5分钟。生成的绘图窗口非常大,里面显示的所有内容也都很大。可能是英寸或其他什么单位吧? - Ryan R. Rosario
6
屏幕显示(如窗口或x11)和矢量绘图设备(如pdf,postscript)的单位为英寸,位图绘图设备(如png,jpeg)的单位为像素。监视器通常显示每英寸72或96个像素,纸张打印的像素密度从150到1200像素不等。 - Richie Cotton
谢谢您的解释。我想知道为什么那里有不一致之处?如果所有东西都是以像素为单位,那会更明显。 - Shane
8
如果Rstudio中没有结果,请尝试:dev.new(width=5,height=4,noRStudioGD = TRUE)。该命令的作用是重新打开一个绘图设备,以便在其中生成新的图形输出。如果在Rstudio中出现问题,可以使用noRStudioGD选项来避免与Rstudio集成的图形设备发生冲突。 - Soren Havelund Welling
这里需要调用dev.new而不是par,有什么原因吗?pardinfinpin参数看起来很相关。 - J. Mini
显示剩余2条评论

26

这将取决于您使用的设备。如果您使用的是pdf 设备,您可以执行以下操作:

pdf( "mygraph.pdf", width = 11, height = 8 )
plot( x, y )

您可以使用mfrow参数来划分pdf中的空间,例如:

par( mfrow = c(2,2) )

创建一个包含四个面板的pdf文件可用于绘图。不幸的是,某些设备使用的单位与其他设备不同。例如,我认为X11使用像素,而我确定pdf使用英寸。如果您只想创建几个设备并将不同的内容绘制到它们上面,可以使用dev.new(),dev.list()和dev.next()
其他有用的设备包括:
- X11 - postscript - BMP,JPEG,PNG和TIFF - quartz(仅限于OSX) 这里列出了所有设备的列表here

15

一个方便的保存图表的函数是ggsave(),它可以根据文件扩展名自动猜测设备类型,并平滑处理设备之间的差异。您可以按以下方式使用特定的大小和单位进行保存:

ggsave("mtcars.png", width = 20, height = 20, units = "cm")

在R Markdown中,可以通过代码块指定图像大小
```{r, fig.width=6, fig.height=4}  
plot(1:5)
```

6
由于@Shane提供的解决方案目前(2015年9月)不受RStudio支持(请参见此处),因此我想在@James Thompson的答案中添加一个关于工作流程的建议:
如果您使用SumatraPDF作为查看器,则无需在对其进行更改之前关闭PDF文件。 Sumatra不会将打开的文件设置为只读,并且不会阻止其被覆盖。 因此,一旦您使用Sumatra打开了PDF文件,RStudio(或任何其他R IDE)外部的更改会立即显示在Sumatra中。

1
在Rstudio中,这对我也没有用,直到将noRStudioGD设置为TRUE, dev.new(width=5,noRStudioGD = TRUE)。 - Soren Havelund Welling
在Mac上有没有类似的查看器可以这样工作? - WetlabStudent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接