Lea*_*ros 14 plot r ggplot2 radar-chart gridextra
我正在使用ggplot2绘制图形,我有facet_wrap制作多个图形(~51)的功能,但它们都出现在一个页面上.现在搜索后,我发现ggplot2无法在多个页面上放置图形.
有没有办法做到这一点?我看了这个问题(使用ggplot在多个页面上多个图表)并尝试了代码,但收效甚微.
这是我的图形代码,它在一个页面上生成约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()
如果有人可以写一些代码并向我解释,那就太好了!
谢谢!
eip*_*i10 14
一种选择是individual使用您现在使用的相同代码一次绘制六个级别.对于数据的每个子集,您只需要多次迭代一次.您尚未提供示例数据,因此这是使用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()
上面的代码将生成一个包含四页图表的PDF文件,每个图表有一个页面的六个面.您还可以创建四个单独的PDF文件,每个组包含六个方面:
for (i in seq(1, length(unique(Baseball$team87)), 6)) {
pdf(paste0("baseball_",i,".pdf"), 7, 5)
  ...ggplot code...
dev.off()
}
如果您需要更多灵活性,另一个选项是为构面变量的每个级别(即每个唯一值)创建单独的图,并将所有单个图保存在列表中.然后,您可以在每个页面上布置任意数量的图表.这在这里可能有些过分,但这里有一个灵活性派上用场的例子.
首先,让我们创建所有的情节.我们将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())
})
现在我们将在PDF文件中列出六个图.下面是两个选项,一个包含四个单独的PDF文件,每个包含六个图,另一个包含一个四页的PDF文件.我还粘贴在底部的一块地块上.我们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。另请参见此答案的另一个示例。
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 。
| 归档时间: | 
 | 
| 查看次数: | 11112 次 | 
| 最近记录: |