ข้อผิดพลาดใน 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)

อ่าขอบคุณสำหรับคำชี้แจง ฉันกำลังจัดการเลย์เอาต์ (เมทริกซ์ ()) แทน ขอบคุณความช่วยเหลือ!
Steve Hwang

2
นี่เป็นคำแนะนำที่ถูกต้องสำหรับฉัน ฉันต้องเพิ่มขนาดภาพหรือลดความละเอียดในpng(filename="myfile.png", res=150, width = 1000, height = 1000)
vanao veneri

146

ข้อผิดพลาดนี้สามารถเกิดขึ้นได้ใน Rstudio เพียงเพราะบานหน้าต่าง "Plots" ของคุณมีขนาดเล็กเกินไป ลองซูม "ไฟล์พล็อตแพ็คเกจวิธีใช้โปรแกรมดู" ของคุณแล้วดูว่าช่วยได้ไหม!


8
นี่ช่วยแก้ปัญหาของฉันได้! ฉันได้ขยายหน้าต่าง "สภาพแวดล้อม" ย่อขนาดหน้าต่าง "พล็อต" ฯลฯ ฉันต้องขยายหน้าต่าง ขอบคุณ!
Rock Lee

ตกลงสิ่งนี้ส่งผลกระทบต่อ RStudio ของฉันด้วยและการขยายหน้าต่างก็ช่วยได้
Kingz

บางครั้งฉันบังเอิญลงเอยด้วยบานหน้าต่างจำนวนมากเนื่องจากใช้พาร์ () par(mfrow=c(1,1))สามารถรีเซ็ตคุณเป็นบานหน้าต่างเดียว
Matt

1
มันเป็นข้อผิดพลาดที่แปลกมากสำหรับฉันเนื่องจากฉันยังใหม่กับ R ไม่เคยมีปัญหาใด ๆ มาก่อนกับภาษาอื่น ๆ / IDE ที่รูปแบบ IDE จะส่งผลกระทบต่อรหัสของฉัน !!
Adarsha

ยอดเยี่ยมสิ่งนี้ใช้ได้ผลกับฉันด้วย ช่างเป็นข้อผิดพลาดแปลก ๆ !
โมฮัมหมัด

70

หากคุณได้รับข้อความนี้ใน RStudio การคลิกรูป "ไม้กวาด" "ล้างพล็อตทั้งหมด" ในแท็บพล็อตและลองลงจุด () อีกครั้งอาจได้ผล

ใส่คำอธิบายภาพที่นี่


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
Ron Jensen - เราทุกคนคือ Monica

1
คำตอบที่เหมาะสมที่สุดเท่าที่เคยมีมา ขอบคุณ.
TeeKea

เทียบเท่ากับ MacOSX หรือไม่
TeYaP

ฉันลองวิธีแก้ปัญหานี้เมื่อฉันได้รับError in plot.new() : figure margins too largeข้อผิดพลาดใน RStudio เมื่อวาด OLS-CUSUM และทำงานได้อย่างน่าอัศจรรย์ ขอบคุณมาก jobligado
Erdogan 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 คุณช่วยอธิบายได้ไหมว่าทำไมจึงเป็นคำตอบ
Mike Poole

0

หากมาร์จิ้นต่ำการเริ่มต้นด้วยอุปกรณ์พล็อตใหม่จะดีกว่าเสมอ:

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

คุณจะไม่ได้รับข้อผิดพลาดของระยะขอบเว้นแต่คุณจะวางแผนสิ่งที่มีขนาดใหญ่ซึ่งไม่สามารถรองรับได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.