Ошибка в plot.new (): слишком большие поля рисунка в R


111

Я новичок в R, но я сделал множество графиков корреляции с меньшими наборами данных. Однако, когда я пытаюсь построить большой набор данных (2 ГБ +), я могу построить график просто отлично, но легенда не отображается. Любой совет? или альтернативы?

library(gplots)
r.cor <- cor(r)
layout(matrix(c(1,1,1,1,1,1,1,1,2,2), 5, 2, byrow = TRUE))
par(oma=c(5,7,1,1))
cx <- rev(colorpanel(25,"yellow","black","blue"))
leg <- seq(min(r.cor,na.rm=T),max(r.cor,na.rm=T),length=10)
image(r.cor,main="Correlation plot Normal/Tumor data",axes=F,col=cx)
axis(1, at=seq(0,1,length=ncol(r.cor)), labels=dimnames(r.cor)[[2]], 
    cex.axis=0.9,las=2)
axis(2,at=seq(0,1,length=ncol(r.cor)), labels=dimnames(r.cor)[[2]],
     cex.axis=0.9,las=2)
image(as.matrix(leg),col=cx,axes=T)     

Ошибка plot.new(): слишком большие поля рисунка

tmp <- round(leg,2)
axis(1,at=seq(0,1,length=length(leg)), labels=tmp,cex.axis=1)

1
Вы должны предоставить нам воспроизводимый пример, демонстрирующий ваши болезни. stackoverflow.com/questions/12765668/…
Роман Луштрик 07

Я попробовал все вышеперечисленное, но ничего не помогло. Однако время от времени (по крайней мере, для такого новичка, как я) данные в матрице или data.frame могут быть принудительно преобразованы в какой-то тип, о котором вы не знали. В этом случае используйте as.numeric перед вашими данными, чтобы убедиться, что это не проблема.
pApaAPPApapapa

Ответы:


86

Я подозреваю, что проблема в том, что область 2 маленькой фигуры, созданная вашим layout()вызовом, недостаточно велика, чтобы содержать только поля по умолчанию, не говоря уже о графике.

Перед строкой, вызывающей проблему, попробуйте:

par(mar = rep(2, 4))

затем постройте второе изображение

image(as.matrix(leg),col=cx,axes=T)

Вам нужно будет поиграть с размером полей на par()вызове, который я показываю, чтобы понять это правильно. Вам также может потребоваться увеличить размер фактического устройства, на котором вы строите.

Последний совет: сохраните par()настройки по умолчанию перед их изменением, поэтому измените существующий par()вызов на:

op <- par(oma=c(5,7,1,1))

затем в конце построения сделайте

par(op)

Ах, спасибо за разъяснения. Вместо этого я манипулировал макетом (matrix ()). Цените помощь!
Стив Хван,

2
это был правильный намек для меня. Мне пришлось увеличить размер изображения или уменьшить разрешениеpng(filename="myfile.png", res=150, width = 1000, height = 1000)
vanao veneri 06

146

Эта ошибка может возникать в Rstudio просто потому, что ваша панель «Графики» слишком мала. Попробуйте увеличить ваши «Файлы, графики, пакеты, справку, средство просмотра» и посмотрите, поможет ли это!


8
Это решило мою проблему! Я расширил окно «Среда», уменьшив окно «Графики» и т. Д. Мне просто нужно было развернуть окно. Спасибо!
Rock Lee

Согласен, это повлияло и на мою RStudio, и мне помогло простое расширение окна.
Kingz

Иногда я случайно получаю несколько панелей из-за использования par (). par(mfrow=c(1,1))может сбросить вас на одну панель.
Мэтт,

1
для меня это была очень странная ошибка, так как я новичок в R. Никогда раньше не было проблем с любыми другими языками / IDE, где макет IDE повлияет на мой код !!
Adarsha

Замечательно, у меня это тоже сработало. Какая странная ошибка!
Мохаммад

70

Если вы получили это сообщение в RStudio, щелкните фигуру «метла» «Очистить все графики» на вкладке «Графики» и снова попробуйте plot ().

введите описание изображения здесь


1
Это лучший ответ.
NewbieDave

15
graphics.off()
rawr

Мне нравится этот ответ
O.rka 03

Это действительно лучший ответ. Спасибо.
merve bıçakçı

24

Иногда такое случается в RStudio. Чтобы решить эту проблему, вы можете попытаться построить график во внешнем окне (только для Windows):

windows() ## create window to plot your file
## ... your plotting code here ...
dev.off() 

1
Это лучший ответ, чем покупка монитора большего размера. Также существует команда x11 (), которая должна работать в Linux.
Рон Дженсен - Мы все Моника

1
Самый подходящий ответ на свете. Спасибо.
TeeKea

любой эквивалент для MacOSX?
TeYaP 06

Я попробовал это решение, когда получаю Error in plot.new() : figure margins too largeошибку в RStudio при рисовании OLS-CUSUM, и оно чудесным образом сработало. Большое спасибо jobligado.
Эрдоган CEVHER

19

Я получил эту ошибку в R Studio, и ее просто исправили, увеличив боковую панель, щелкнув и перетащив ее край справа налево.


2
это был победитель. Почему это вообще вещь?
Colin

2
Ни одно из других решений, кроме этого, у меня не сработало.
zsad512

1
Не знаю, как и почему, но это было единственное решение, которое сработало для меня.
TheSciGuy

10

Проверьте, является ли ваш объект списком или вектором. Для этого наберите is.list(yourobject). Если это правда, попробуйте переименовать его x<-unlist(yourobject). Это превратит его в вектор, который вы можете построить.


Это сделало это для меня (с использованием png()/ dev.off()в Rstudio).
Ноах


3

Я обнаружил эту ошибку сегодня. Изначально я пытался вывести его в .jpegфайл с малой шириной и высотой.

jpeg("method1_test.jpg", width=900, height=900, res=40)

Позже я увеличил ширину и высоту до:

jpeg("method1_test.jpg", width=1900, height=1900, res=40)

Ошибки не было. :)

Вы также можете поиграть с разрешением, если разрешение высокое, вам нужно больше ширины и высоты.



2

Я боролся с этой ошибкой в ​​течение нескольких недель (используя RStudio). Я пытался перемещать окно графика все больше и меньше, но это не всегда помогало. Когда я переместил (перетащил) приложение на свой больший монитор, проблема исчезла! Я был ошеломлен ... столько потраченных впустую часов ... Я знал, что мой код правильный ...


0

Холст RStudio Plots ограничивает ширину и высоту графика. Однако, если вы сделаете свой график из фрагмента кода Rmarkdown , он будет работать без ограничения поля холста, поскольку область рисования устанавливается в соответствии с размером бумаги.

Например:

    ```{r}
#inside of code chunk in Rmarkdown
        grid <- par(mfrow=c(4, 5))
        plot(faithful, main="Faithful eruptions")
        plot(large.islands, main="Islands", ylab="Area")
        ...
        par(grid)
    ```

0

Сегодня я обнаружил ту же ошибку. Я попробовал кнопку «Очистить все графики», но у меня возникла та же ошибка. Тогда у меня сработал этот трюк, попробуйте увеличить площадь графика перетаскиванием. Это вам точно поможет.


0

Я просто использовал Очистить все графики, а затем снова дал команду графика, и это было полезно


1
Добро пожаловать в SO. Пожалуйста, объясните, почему это ответ.
Майк Пул

0

Если маржа низкая, всегда лучше начинать с нового плоттера:

dev.new()
# plot()
# save your plot
dev.off()

Вы никогда не получите маржинальной погрешности, если только вы не нанесете на карту что-то большое, что не может быть размещено.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.