이것은 ggplot2 Google 그룹에 교차 게시되었습니다.
내 상황은 사용자가 제공 한 입력 데이터에 따라 임의의 수의 플롯을 출력하는 함수 를 작업하고 있다는 것 입니다. 이 함수는 n 개의 플롯 목록을 반환하며이 플롯을 2 x 2 형식으로 배치하고 싶습니다. 다음과 같은 동시 문제로 어려움을 겪고 있습니다.
- 임의의 (n) 수의 플롯에 유연성을 부여하려면 어떻게해야합니까?
- 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)
그러지 않겠다는 생각에, 저는 저보다 훨씬 더 현명한 커뮤니티의 현명한 피드백을 간절히 기다리며 겸손히 모퉁이에 모여 있습니다. 특히이 일을 필요 이상으로 어렵게 만들고 있다면 더욱 그렇습니다.