R语言dev.new函数生成的绘图区域是否存在大小上限?
聊聊R绘图设备尺寸的那些“反直觉”现象
嗨,我来帮你理清这个关于R绘图窗口尺寸的问题:
先把你的观察捋清楚
- 当你敲
dev.size("in")时,如果当前没有打开任何绘图窗口,R会自动帮你创建一个默认的绘图设备,返回的[1] 5.333333 5.322917就是这个默认窗口的英寸尺寸。 - 用
dev.new(length=3,width=3)创建的窗口确实比默认窗口小,这很正常,但dev.new(length=8,width=8)却和默认窗口尺寸一模一样,这就有点奇怪了对吧?
为啥会这样?
这背后其实是系统绘图设备的默认限制在搞鬼:
- 不同操作系统的默认绘图设备(比如Windows的
windows()、Mac的quartz())都有窗口尺寸的上限。当你设置的length和width超过这个上限时,R会自动把窗口调整到系统允许的最大尺寸,而这个最大尺寸刚好就是dev.size("in")返回的默认值。 - 另外,
dev.size("in")返回的是当前活跃设备的实际尺寸,如果你先开dev.new(length=8,width=8),再查尺寸,会发现返回的其实是系统限制的最大值,不是你设置的8x8英寸。
怎么解决这个问题?
如果你想精准控制绘图窗口的尺寸,可以试试这些办法:
- 直接调用对应系统的绘图设备:比如Windows上用
windows(width=8, height=8),Mac上用quartz(width=8, height=8),这些设备的参数通常能更精准生效(只要不超过你的屏幕硬件限制)。 - 用非交互式设备导出图片:如果只是为了生成图片文件而不是显示窗口,用
png()、pdf()这类设备就完全没问题,尺寸想设多少就设多少,比如:# 生成8x8英寸的PNG图片,分辨率300dpi png("my_plot.png", width=8, height=8, units="in", res=300) plot(1:10) # 随便画个示例图 dev.off() # 关闭设备 - 查设备文档看限制:你可以敲
?windows或者?quartz查看当前系统绘图设备的参数说明,里面会提到尺寸上限,避免设置超出限制的数值。
补充一句:你直接调用dev.size("in")时自动创建的设备,就是系统默认的绘图设备,它的尺寸是系统预设好的;而dev.new()本质上是调用这个默认设备并传参数,参数超限时就会被“砍”到系统允许的最大值。
内容的提问来源于stack exchange,提问作者Yeping Sun
相关产品推荐
相关产品推荐

