Помилка plot.new (): надмірна межа фігури в R


111

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

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 / ...
Roman Luštrik

Я спробував усе вищесказане, і нічого не вийшло. Однак час від часу (принаймні, для новачків, як я), дані в матриці або 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)

Ах, дякую за роз’яснення. Я замість цього маніпулював макетом (матрицею ()). Вдячний за допомогу!
Стів Хван

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

146

Ця помилка може виникнути в Rstudio просто тому, що панель "Сюжети" ледве занадто мала. Спробуйте збільшити масштаб "Файлів, сюжетів, пакунків, довідки, переглядача" і подивіться, чи це допомагає!


8
Це вирішило мою проблему! Я розширив вікно "Навколишнє середовище", зменшивши вікно "Сюжети" тощо. Мені просто довелося розгорнути вікно. Дякую!
Рок Лі

Домовились, це вплинуло і на мій RStudio, і просто розширення вікна допомогло.
Кінгз

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

1
це була дуже дивна помилка для мене, оскільки я новачок у Р. Ніколи не виникав жодних проблем з будь-якими іншими мовами / IDE, де макет IDE вплине на мій код !!
Адарша

Дивовижно, це працювало і для мене. Така дивна помилка!
Мохаммед

70

Якщо ви отримаєте це повідомлення в RStudio, натисніть на фігуру "мітла" "Очистити всі ділянки" на вкладці Сюжети і спробу plot () знову може працювати.

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


1
Це найкраща відповідь.
NewbieDave

15
graphics.off()
rawr

Мені подобається ця відповідь
O.rka

Це справді найкраща відповідь. Дякую.
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

Я спробував це рішення, коли отримав Error in plot.new() : figure margins too largeпомилку в RStudio під час малювання OLS-CUSUM, і воно спрацювало дивом. Величезне спасибі jobligado.
Ердоган ЦЕВЕР

19

Я отримав цю помилку в R Studio, і її просто виправили, зробивши бічну панель більшою, натиснувши та перетягнувши її край праворуч наліво.


2
це був переможець. Чому це навіть річ?
colin

2
Жодне з інших рішень для мене не працювало, окрім цього.
zsad512

1
Не знаю, як і чому, але це також було єдиним рішенням, яке працювало на мене.
TheSciGuy

10

Перевірте, чи об’єктом є список чи вектор. Для цього введіть is.list(yourobject). Якщо це правда, спробуйте перейменувати її x<-unlist(yourobject). Це перетворить його у вектор, який ви зможете побудувати.


Це зробив це для мене (за допомогою png()/ dev.off()в Rstudio).
знах

5

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

Просто використовуйте масштаб цієї області, якщо ви використовуєте 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.