如何在rstudio中解决'plot.new()中的错误:数字边距太大'?

时间:2017-07-04 14:57:56

标签: r rstudio

我已经阅读了与此问题相关的所有帖子。但事实是:如果要绘制大量变量,则仍会出现此问题。
我的笔记本电脑分辨率是1080p,我打开rstudio并在脚本下面运行:

a<-iris[,1:4]
> a<-t(a)
> a<-as.data.frame(a)
> pairs(a)
Error in plot.new() : figure margins too large

我已尝试过类似问题的本网站所有解决方案,但没有一个是可行的 我真的需要这个情节,但无法得到它。如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

我会以两种方式回答。首先,当你使用虹膜数据集时,你确定你想要一个转置的成对图吗?这意味着比较单个花朵,而不是比较特征(如萼片长度等)。这是你想要的吗?

> a <- iris[,1:4]
> pairs(a)

这将为您提供4x4对图(比较花卉特征)。但是,如果你确实想要在观察而不是特征之间绘制一对图,那么你需要一个150x150对的图!在我看来,这样做的唯一方法是生成多对图,每个图对应150个项目的子集。

答案 1 :(得分:1)

我可以想象这样做的唯一方法是(我认为之前已经提出过)将输出发送到PDF文件,然后使用PDF查看器查看它。 (我的答案非常类似于this question的答案,除了我使用的是PDF而不是PNG作为输出...也尝试用于PNG,似乎适用于2000x2000像素......)

对于较小/合理的示例,使用dev.new()缩放和/或打开外部图形窗口应该有效...

a <- iris[,1:4]
a <- t(a)
a <- as.data.frame(a)
pdf(file="tmp.pdf",width=100,height=100)
pairs(a,gap=0,pch=".")
dev.off()

我的笔记本电脑花了大约18秒钟,制作了一个1.2M的PDF文件。这是我在PDF查看器中一直缩小(“适合窗口”)时图片的样子:

enter image description here

如果您有150x150的子图并想要渲染每个1厘米宽x 1厘米高(对于查看任何细节而言看起来很小),那么您要么需要一台非常高分辨率的投影仪,要么需要一台大型投影机。格式(海报)打印机。您可以使用PDF查看器滚动图像,但它似乎不太实用......

答案 2 :(得分:1)

该问题似乎是由于图像不适合全局设置所呈现的图形窗口所致。确保您的缩放比例未设置超过100%

答案 3 :(得分:0)

RStudio根本无法显示非常大的图。如果有分组变量,请为每个类别/因子指定行,然后再次绘图;这变成了一个较小的情节:

EX:如果您有一个数据框,其中“ groups”列中有两组x和y的100行,并为每个组绘制20列作为变量,则获取x的所有列的图表(对应到第1:50行):

library(tidyverse)
df[1:50,] %>%
keep(is.numeric) %>% 
  gather() %>% 
  ggplot(aes(value)) +
    facet_wrap(~ key, scales = "free") +
    geom_histogram()

希望这会有所帮助!