私が持っています facet_wrap
関数を使用して複数のグラフ(n =〜51)を作成しますが、すべて1ページに表示されます。検索したところ、ggplot2ではグラフを複数のページに配置できないことがわかりました。
これを行う方法はありますか?私はこの質問( ggplotを使用した複数ページにわたる複数のグラフ )を見て、ほとんど成功せずにコードを試してみました。
これが私のグラフのコードです。1ページに最大51個のグラフが生成され、非常に小さく見づらくなります。これをPDFのページごとに1つのグラフに印刷できれば、すばらしいでしょう。
ggplot(indbill, aes(x = prey, y = weight), tab) +
geom_polygon(aes(group = load, color = capture), fill = NA, size = 0.75) +
facet_wrap(~ individual) +
theme(axis.ticks.x = element_blank(),
axis.text.x = element_text(size=rel(0.5)),
axis.ticks.y = element_blank(),
axis.text.y = element_blank()) +
xlab("") + ylab("") +
guides(color = guide_legend(ncol=2)) +
coord_radar()
誰かが小さなコードを書いて私にそれを説明できたら、それは素晴らしいことです。
1つのオプションは、たとえば現在使用しているのと同じコードを使用して、一度に6レベルのindividual
をプロットすることです。データのサブセットごとに1回ずつ、数回繰り返す必要があります。サンプルデータが提供されていないため、Baseball
データフレームを使用した例を次に示します。
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ページのプロットを含むPDFファイルを生成します。各ページには6つのファセットがあります。4つの個別のPDFファイル、 6つのファセットの各グループ:
for (i in seq(1, length(unique(Baseball$team87)), 6)) {
pdf(paste0("baseball_",i,".pdf"), 7, 5)
...ggplot code...
dev.off()
}
さらに柔軟性が必要な場合の別のオプションは、ファセット変数のレベルごと(つまり、一意の値ごと)に個別のプロットを作成し、個々のプロットをすべてリストに保存することです。次に、各ページに任意の数のプロットを配置できます。これはおそらくやり過ぎですが、柔軟性は非常に役立ちます ここに例があります 。
まず、すべてのプロットを作成しましょう。 team87
をファセット列として使用します。したがって、team87
のレベルごとに1つのプロットを作成します。これを行うには、データを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())
})
PDFファイルで一度に6つのプロットをレイアウトします。以下は2つのオプションです。1つは4つの別々のPDFファイルで、それぞれ6つのプロットを含みます。もう1つの4ページのPDFファイル。下部のプロットの1つにも貼り付けました。grid.arrange
を使用して、プロットをレイアウトします。 left
およびbottom
引数を使用して、軸のタイトルを追加します。
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()
ページ付けには複数の方法があります: ggforce または gridExtra :: marrangeGrob 。別の例については、この answer も参照してください。
library(ggplot2)
library(ggforce)
# Standard facetting: too many small plots
ggplot(diamonds) +
geom_point(aes(carat, price), alpha = 0.1) +
facet_wrap(~cut:clarity, ncol = 3)
# Pagination: page 1
ggplot(diamonds) +
geom_point(aes(carat, price), alpha = 0.1) +
facet_wrap_paginate(~cut:clarity, ncol = 3, nrow = 3, page = 1)
# Pagination: page 2
ggplot(diamonds) +
geom_point(aes(carat, price), alpha = 0.1) +
facet_wrap_paginate(~cut:clarity, ncol = 3, nrow = 3, page = 2)
# Works with grid as well
ggplot(diamonds) +
geom_point(aes(carat, price), alpha = 0.1) +
facet_grid_paginate(color~cut:clarity, ncol = 3, nrow = 3, page = 4)
library(gridExtra)
set.seed(123)
pl <- lapply(1:11, function(.x)
qplot(1:10, rnorm(10), main=paste("plot", .x)))
ml <- marrangeGrob(pl, nrow=2, ncol=2)
## non-interactive use, multipage pdf
## ggsave("multipage.pdf", ml)
## interactive use; calling `dev.new` multiple times
ml
reprexパッケージ (v0.2.0.9000)によって2018-08-09に作成されました。
何かのようなもの :
by(indbill, indbill$individual, function (x){
ggplot(x, aes(x = prey, y = weight), tab) +
geom_polygon(aes(group = load, color = capture), fill = NA, size = 0.75) +
theme(axis.ticks.x = element_blank(),
axis.text.x = element_text(size=rel(0.5)),
axis.ticks.y = element_blank(),
axis.text.y = element_blank()) +
xlab("") + ylab("") +
guides(color = guide_legend(ncol=2)) +
coord_radar()
}