我正在对我的数据进行探索性分析,需要使用ggplot绘制多个图形.图形数量非常庞大(206个工作站),我想在所需的许多页面上将它们绘制成1列而不是每页8行.我知道像viewport或grid.arrange这样的函数,但我不能让它们在这种情况下工作.我已经注意到layout()和par(mfrow = c(8,1))不能与ggplot一起使用,但是我发送了代码中我被卡住的部分.任何帮助将非常感激!
pdf('test.pdf', width=21, height=27)
par(mfrow=c(8,1))
for(i in levels(tab$Station))
{
print(ggplot(tab[tab$Station==i], aes(x=Date)) +
geom_line(aes(y=Tmin), col="blue", size=0.1) +
geom_line(aes(y=Tmax), col="red", size=0.1) +
geom_text(aes(x=as.Date('2010-01-01'), y=45), label=i) +
ylim(0, 45) +
scale_x_date(labels = date_format("%Y")) +
theme_bw() +
theme(
plot.background = element_blank()
,panel.grid.major = element_blank()
,panel.grid.minor = element_blank()
,panel.border = element_rect(color = 'black')
,panel.background = element_blank()
)
)
}
dev.off()
Run Code Online (Sandbox Code Playgroud)
bap*_*ste 11
library(plyr)
library(gridExtra)
p = ggplot(tab, aes(x=Date)) +
geom_line(aes(y=Tmin), col="blue", size=0.1)
plots = dlply(tab , "Station", `%+%`, e1 = p)
ml = do.call(marrangeGrob, c(plots, list(nrow=8, ncol=1)))
ggsave("multipage.pdf", ml)
Run Code Online (Sandbox Code Playgroud)
未经测试.
您应该简化您的绘图,因为一旦您使用简单的绘图获得了正确的顺序,您只需将其替换为复杂的绘图即可。ggplot2
基于grid
包,因此您需要使用它gridExtra
来安排您的绘图。然后循环遍历,对于每 8 个图,将它们存储在一个列表中并调用grid.arrange
它,重复此操作直到图结束......
library(gridExtra)
library(ggplot2)
pdf('test.pdf', width=21, height=27)
i = 1
plot = list()
for (n in unique(tab$Station)){
### process data for plotting here ####
plot[[i]] = ggplot(tab[tab$Station==n], aes(x=Date)) +...
if (i %% 8 == 0) { ## print 8 plots on a page
print (do.call(grid.arrange, plot))
plot = list() # reset plot
i = 0 # reset index
}
i = i + 1
}
if (length(plot) != 0) {
print (do.call(grid.arrange, plot))
}
dev.off()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15162 次 |
最近记录: |