1つのオプションは、あなたが今使っている同じコードを使用して、一度に、たとえば、単にプロットにindividual
の6つのレベルです。データのサブセットごとに1回ずつ、複数回反復するだけで済みます。
library(ggplot2)
library(vcd) # For the Baseball data
data(Baseball)
pdf("baseball.pdf", 7, 5)
for (i in seq(1, length(unique(Baseball$team87)), 6)) {
print(ggplot(Baseball[Baseball$team87 %in% levels(Baseball$team87)[i:(i+5)], ],
aes(hits86, sal87)) +
geom_point() +
facet_wrap(~ team87) +
scale_y_continuous(limits=c(0, max(Baseball$sal87, na.rm=TRUE))) +
scale_x_continuous(limits=c(0, max(Baseball$hits86))) +
theme_bw())
}
dev.off()
上記のコードは、プロットの4ページ、ページへの6つのファセットを有する各付きPDFファイルが生成されます:あなたはので、ここでBaseball
データフレームを使用した例ですが、サンプルデータを提供していません。あなたはまた、6つのファセットのグループごとに4つの別々のPDFファイル、1を作成することができます:あなたはより多くの柔軟性が必要な場合
for (i in seq(1, length(unique(Baseball$team87)), 6)) {
pdf(paste0("baseball_",i,".pdf"), 7, 5)
...ggplot code...
dev.off()
}
別のオプションは、レベルごとに別々のプロットを作成することです(つまり、それぞれ固有の値)ファセット変数の値を計算し、個々のプロットをすべてリストに保存します。次に、各ページに任意の数のプロットをレイアウトすることができます。これはおそらくここでは過剰ですが、柔軟性が役立つhere's an exampleがあります。
まず、すべてのプロットを作成します。ファセット設定の列にteam87
を使用します。そこで、各レベルのプロットをteam87
にしたいと考えています。データをteam87
で分割し、データの各サブセットごとに別々のプロットを作成します。
split
は、レベルをteam87
の別々のデータフレームに分割します。 lapply
ラッパーは、各データサブセットをggplotに順次フィードして各チームのプロットを作成します。出力はplist
に保存されます。このリストは(この場合は)24個のプロットです。
plist = lapply(split(Baseball, Baseball$team87), function(d) {
ggplot(d, aes(hits86, sal87)) +
geom_point() +
facet_wrap(~ team87) +
scale_y_continuous(limits=c(0, max(Baseball$sal87, na.rm=TRUE))) +
scale_x_continuous(limits=c(0, max(Baseball$hits86))) +
theme_bw() +
theme(plot.margin=unit(rep(0.4,4),"lines"),
axis.title=element_blank())
})
ここで、6つのプロットをPDFファイルにレイアウトします。以下に2つのオプションがあります.1つは4つのPDFファイルで、それぞれ6つのプロットがあり、もう1つは4ページのPDFファイルが1つあります。私はまた、一番下のプロットの1つに貼り付けました。軸のタイトルを追加するためにleft
とbottom
引数を使用することを含む、プロットのレイアウトにはgrid.arrange
を使用します。
library(gridExtra)
# Four separate single-page PDF files, each with six plots
for (i in seq(1, length(plist), 6)) {
pdf(paste0("baseball_",i,".pdf"), 7, 5)
grid.arrange(grobs=plist[i:(i+5)],
ncol=3, left="Salary 1987", bottom="Hits 1986")
dev.off()
}
# Four pages of plots in one PDF file
pdf("baseball.pdf", 7, 5)
for (i in seq(1, length(plist), 6)) {
grid.arrange(grobs=plist[i:(i+5)],
ncol=3, left="Salary 1987", bottom="Hits 1986")
}
dev.off()
こんにちはeipi10!それはすばらしく働き、理解しやすいものでした!私は1つの問題がありますが。コードは私の個人の1人が好きではないようですが、私はこのエラーを受けています。この個所に当たった後、印刷を停止します。 '= list(gbs(705-70773 = list(grobs = list(list = x = 0.5、y = 0。5、: "gList"に 'grobs'しか許可されていません。 助けがあれば助かります! – LearningTheMacros
その個人のプロットが生成されないというデータがありますか?プロットがない場合、プロットコードの出力はgrob(グラフィックスオブジェクト)になりません。たとえば、その個人またはそのようなものについてすべてのデータが欠落していますか?プロットを作成してみてください.ggplotにその個人のデータだけでデータフレームを送り、何が起こるかを見てください。その個人のデータを見て、明らかに異なるものがあるかどうかを確認します。 – eipi10
HubertLの提案を使用したときにプロットが作成されたので、私はうんざりします。いずれにせよ、私はあなたの答えを理解し、それは将来私を助けるでしょう。 もう一度おねがいします! – LearningTheMacros