จะวาดพล็อตเปล่าได้อย่างไร?


107

ฉันต้องการสร้างพล็อตที่ว่างเปล่า นี่เป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้

plot(0, xaxt = 'n', yaxt = 'n', bty = 'n', pch = '', ylab = '', xlab = '')

วิธีแก้ปัญหาที่ง่ายกว่านี้หรือไม่?

PS: ว่างเปล่าไม่มีแกน ฯลฯ

คำตอบ:


108

แล้วสิ่งที่ชอบ:

plot.new()

@ อดัมฉันไม่รู้ว่าคุณหมายถึงอะไร "R Proper"
Joshua Ulrich

@ โจชัวขอโทษ plot.new () ใช้งานได้ดีไม่จำเป็นต้องใช้ x11 () ฉันพูดว่า R เหมาะสมเพราะฉันคิดว่า x11 () เป็นส่วนหนึ่งของวิธีแก้ปัญหาของคุณ แต่มันใช้งานได้หากไม่มีมัน
Adam SO

1
@Adam x11()เป็นคำสั่ง R ข้ามแพลตฟอร์มเพื่อเปิดอุปกรณ์ใหม่ หากคุณมีอุปกรณ์เปิดอยู่และโทรออกplot.new()อุปกรณ์ปัจจุบันจะถูกล้าง
Joshua Ulrich

1
มีข้อได้เปรียบx11()มากกว่าdev.new()หรือไม่? สัญชาตญาณของฉันคือไปกับอุปกรณ์หลังเพื่อรองรับอุปกรณ์เริ่มต้นในท้องถิ่น แต่ฉันไม่แน่ใจว่ามันทำงานอย่างไร
Matt Parker

@ แมท: ฉันใช้x11()เพราะความเคยชิน ฉันไม่ใช่ผู้เชี่ยวชาญในการวางแผนใน R แต่หลังจากดูเอกสารแล้วdev.new()น่าจะดีกว่า
Joshua Ulrich

63

ฉันขอแนะนำให้ใครบางคนต้องสร้างพล็อตที่ว่างเปล่าเพื่อเพิ่มกราฟิกในภายหลัง ดังนั้นการใช้

plot(1, type="n", xlab="", ylab="", xlim=c(0, 10), ylim=c(0, 10))

คุณสามารถระบุขีด จำกัด แกนของกราฟิกของคุณ


25

วิธีนี้ง่ายกว่าโซลูชันเดิมของคุณเล็กน้อย:

plot(0,type='n',axes=FALSE,ann=FALSE)

ไม่จำเป็นต้องเพิ่มann=FALSEอยู่ดีจะเป็นพื้นที่ว่างเปล่า แต่เป็นทางออกที่ดีขอบคุณ!
MS Berends

22

ต่อไปนี้จะไม่ลงจุดใด ๆ ในพล็อตและจะยังคงว่างเปล่า

plot(NULL, xlim=c(0,1), ylim=c(0,1), ylab="y label", xlab="x lablel")

สิ่งนี้มีประโยชน์เมื่อคุณต้องการเพิ่มเส้นหรือจุดในภายหลังภายในforลูปหรือสิ่งที่คล้ายกัน อย่าลืมเปลี่ยนค่าxlimและylimตามข้อมูลที่คุณต้องการลงจุด

หมายเหตุด้านข้าง: สามารถใช้กับ Boxplot, Violin plot และ swarm plot สำหรับผู้ที่อย่าลืมเพิ่มลงadd = TRUEในฟังก์ชันการพล็อตและระบุat =เพื่อระบุตัวเลขที่คุณต้องการลงจุด (ค่าเริ่มต้นคือแกน x เว้นแต่คุณจะตั้งค่าไว้horz = TRUEในฟังก์ชันเหล่านี้


17

อดัมตามความคิดเห็นของคุณด้านบน ("ฉันต้องการให้พล็อตว่างเพื่อทำหน้าที่เป็นฟิลเลอร์ในพล็อต multipot (mfrow)") สิ่งที่คุณต้องการจริงๆคือตัวเลือก mfg

    par(mfg=c(row,column))

- ซึ่งควบคุมตำแหน่งที่คุณต้องการวางพล็อตถัดไป ตัวอย่างเช่นในการวางพล็อตไว้ตรงกลางของมัลติล็อต 3x3 ให้ทำ

    par(mfrow=c(3,3))
    par(mfg=c(2,2))
    plot(rnorm(10))

14

คุณต้องมีหน้าต่างพล็อตใหม่และระบบพิกัดดังนั้นคุณต้องมีplot.new()และplot.window()จากนั้นคุณสามารถเริ่มเพิ่มองค์ประกอบกราฟ:

plot.new( )
plot.window( xlim=c(-5,5), ylim=c(-5,5) )

points( rnorm(100), rnorm(100) )
axis( side=1 )

พล็อตตัวอย่าง


4

มีความสนใจในการแก้ปัญหาของคุณที่plot.new()ไม่ได้มี แต่ในพล็อตที่ว่างเปล่าคุณ "วาด" text(x = ..., y = ..., your_text)คุณสามารถเขียนข้อความที่ระบุพิกัดด้วย



2

หากใครกำลังมองหาggplot2วิธีแก้ปัญหาจะใช้ทั้งแบบcowplotหรือpatchworkแพ็กเกจก็ได้

library(ggplot2)

### examples from cowplot vignettes
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
  geom_point(size = 2.5)
plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + 
  geom_bar() +
  theme(axis.text.x = element_text(angle = 0, vjust = 0.5))

library(cowplot)
### use NULL
plot_grid(plot.mpg, NULL, NULL, plot.diamonds,
  labels = c("A", "B", "C", "D"),
  ncol = 2
)

# Note: if you want to initialize an empty drawing canvas, use ggdraw() 

library(patchwork)
### use plot_spacer()
plot.mpg + plot_spacer() + plot_spacer() + plot.diamonds +
  plot_layout(ncol = 2) +
  plot_annotation(
    title = "Plot title",
    subtitle = "Plot subtitle",
    tag_levels = "A",
    tag_suffix = ")"
  )

สร้างเมื่อ 2019-03-17 โดยแพ็คเกจ reprex (v0.2.1.9000)


1

พล็อตว่างพร้อมข้อความบางส่วนที่กำหนดตำแหน่ง

plot(1:10, 1:10,xaxt="n",yaxt="n",bty="n",pch="",ylab="",xlab="", main="", sub="")
mtext("eee", side = 3, line = -0.3, adj = 0.5)
text(5, 10.4, "ddd")
text(5, 7, "ccc")

ทำไมต้องเพิ่มข้อความ "จะสร้างพล็อตเปล่าได้อย่างไร". โดยรวมแล้วสิ่งนี้ดูเหมือนจะซับซ้อนกว่าวิธีการของ OP ในคำถามplot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab='')เนื่องจากคุณเพิ่มmain = "", sub = ""แม้ว่าคุณจะได้ผลลัพธ์เดียวกันหากไม่มีพวกเขา
Gregor Thomas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.