โพสต์ข้ามในกลุ่ม ggplot2 google
สถานการณ์ของฉันคือฉันกำลังทำงานกับฟังก์ชันที่แสดงจำนวนพล็อตโดยพลการ (ขึ้นอยู่กับข้อมูลอินพุตที่ผู้ใช้ให้มา) ฟังก์ชันจะส่งคืนรายการ n พล็อตและฉันต้องการจัดวางพล็อตเหล่านั้นในรูปแบบ 2 x 2 ฉันกำลังดิ้นรนกับปัญหาที่เกิดขึ้นพร้อมกันของ:
- ฉันจะอนุญาตให้มีความยืดหยุ่นในการส่งมอบจำนวนแปลงโดยพลการได้อย่างไร?
- ฉันจะระบุได้อย่างไรว่าฉันต้องการให้วาง 2 x 2
กลยุทธ์ปัจจุบันของฉันใช้grid.arrange
จากgridExtra
แพ็คเกจ มันอาจจะไม่ดีที่สุดโดยเฉพาะอย่างยิ่งตั้งแต่และนี้เป็นกุญแจสำคัญมันทั้งหมดไม่ทำงาน นี่คือโค้ดตัวอย่างที่แสดงความคิดเห็นของฉันโดยทดลองกับสามแปลง
library(ggplot2)
library(gridExtra)
x <- qplot(mpg, disp, data = mtcars)
y <- qplot(hp, wt, data = mtcars)
z <- qplot(qsec, wt, data = mtcars)
# A normal, plain-jane call to grid.arrange is fine for displaying all my plots
grid.arrange(x, y, z)
# But, for my purposes, I need a 2 x 2 layout. So the command below works acceptably.
grid.arrange(x, y, z, nrow = 2, ncol = 2)
# The problem is that the function I'm developing outputs a LIST of an arbitrary
# number plots, and I'd like to be able to plot every plot in the list on a 2 x 2
# laid-out page. I can at least plot a list of plots by constructing a do.call()
# expression, below. (Note: it totally even surprises me that this do.call expression
# DOES work. I'm astounded.)
plot.list <- list(x, y, z)
do.call(grid.arrange, plot.list)
# But now I need 2 x 2 pages. No problem, right? Since do.call() is taking a list of
# arguments, I'll just add my grid.layout arguments to the list. Since grid.arrange is
# supposed to pass layout arguments along to grid.layout anyway, this should work.
args.list <- c(plot.list, "nrow = 2", "ncol = 2")
# Except that the line below is going to fail, producing an "input must be grobs!"
# error
do.call(grid.arrange, args.list)
ในขณะที่ฉันไม่เคยจะทำฉันก็เบียดตัวเข้ามุมอย่างนอบน้อมรอการตอบรับจากชุมชนที่ฉลาดกว่าฉันอย่างใจจดใจจ่อโดยเฉพาะอย่างยิ่งถ้าฉันทำเรื่องนี้ยากกว่าที่ควรจะเป็น