0

我一直无法弄清楚这一点,所以我想我会尝试再次发布它。任何关于如何在 R Markdown 中跨多个页面生成多个分面图的建议将不胜感激!

我有来自多个地点、年份和物种的人口规模数据,我正在尝试使用循环创建多个方面图。一些物种比其他物种拥有更多的数据,因此具有更大的刻面图。为了在我编织到 PDF 时容纳跨多个页面的较大图,我尝试按照以下方式使用 facet_wrap_paginate() 函数:https ://www.programmingwithr.com/how-to-make-your-facet-wrap- facet-grid-ggplots-span-across-multiple-pages-in-pdf/

我遇到的问题是,由于某种原因,多页图相互交替,而不是作为一个组打印。我有一种感觉,这与循环有关,但我一生都无法弄清楚!这是一个可重现的示例:

---
output:
  pdf_document:
    fig_caption: yes
    latex_engine: xelatex
---


```{r , echo=FALSE, message=FALSE, warning=FALSE, comment=FALSE,results='hide'} 

library(tidyverse)
library(dplyr)
library(scales)
library(ggplot2)
library(ggforce)
library(MASS)
library(rlist)


site=c(71,72,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126    ,139,146,146,146,180,180,180,180,72,126,126,126,126,126,126,126,126,126,126,126,240,240,240,4,5,9,9,9,9,9,10,11,16,23,23,23,23,23,23,23,23,23,23,23,23,2    3,23,23,23,23,23,23,23,23,23,26,26,27,27,27,27,27,33,33,33,34,39,42,43,44,48,50,50,50,50,56,56,56,56,58,62,65,66,71,72,72,76,77,79,79,79,79,79,79,79,79,    79,79,79,79,79,86,93,94,94,110,115,116,116,116,128,128,128,128,128,128,128,128,128,138,147,147,163,163,163,163,163,171,171,180,181,185,185,185,185,185,1    98,198,198,211,231,232,232,232,232,232,234,234,1,1,1,6,6,6,6,9,9,9,9,9,9,9,9,10,10,10,11,11,11,12,12,12,12,16,16,16,16,17,17,17,17,17,18,18,18,19,19,19,    19,19,19,20,20,20,20,21,21,21,21,21,21,21,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,25,25,25,25,26,26,26,27,27,27,27    ,27,27,27,27,27,27,27,30,30,30,32,32,32,32,31,31,31,33,33,33,33,33,33,35,35,35,38,38,38,38,38,42,42,42,42,42,47,47,47,48,48,48,50,50,50,50,50,51,51,51,5    2,52,52,52,53,53,53,53,54,54,54,54,55,55,55,56,56,56,56,57,57,57,57,57,58,58,58,60,60,60,60,62,62,62,62,62,63,63,63,63,64,64,64,65,65,65,70,70,70,70,71,    71,71,71,72,72,72,72,73,73,73,73,75,75,75,76,76,76,74,74,74,78,78,78,79,79,79,79,79,79,79,79,82,82,82,82,82,82,82,83,83,83,83,84,84,84,84,85,85,85,85,85    ,86,86,86,86,87,87,87,89,89,89,92,92,92,92,92,94,94,94,94,94,95,95,95,95,96,96,96,97,97,97,98,98,98,99,99,99,105,105,105,105,106,106,106,106,107,107,107    ,108,108,108,108,108,109,109,109,110,110,110,110,110,110,112,112,112,112,114,114,114,115,115,115,116)
species=c("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A    ","A","A","A","A","A","A","A","A","A","C","C","C","C","C","C","C","C","C","C","C","C","C","C","C","D","D","D","D","D","D","D","D","D","D","D","D","D","D    ","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D    ","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D    ","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","D","G","G","G    ","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G    ","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G    ","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G    ","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G    ","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G    ","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G    ","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G    ","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G","G    ","G","G","G","G","G","G","G","G")
size=c(23936,20953,3441,13764,22285,26379,20462,12936,26851,9261,21953,6256,12230,6029,9418,26593,16745,25028,13574,25277,5082,4100,18153,7067,23952,120    75,4750,15114,28718,6513,14051,19109,8042,14314,11190,28471,25527,2062,10875,1512,14099,25335,15873,1753,12494,14172,29171,19706,16618,21544,9606,9099,1    3449,8724,14153,6090,28905,5801,3651,26681,27708,4964,16222,10055,21807,9583,3825,6106,24058,25997,29628,20201,1234,10923,1380,15986,18723,29937,27127,2    5513,23680,7185,7532,14559,23925,761,5976,5070,26145,6885,5724,24299,11083,18167,17288,26562,18243,26999,20722,5223,21510,822,26173,14363,21359,6646,167    47,19681,25835,22308,12547,19352,17106,3407,19726,3106,778,18565,9144,23561,614,6908,24423,151,12592,15051,13801,16464,11086,9385,29443,9372,4753,24323,    26782,2555,9612,6443,2355,6076,16619,16081,28311,9419,85,4827,21655,15289,8709,10343,4359,19348,20287,11196,16578,3814,8875,18533,4592,24807,10214,12840    ,12686,6835,29187,9023,8535,8737,16089,15160,16439,17777,5263,26520,9332,15415,12915,8434,21310,13869,22711,2575,8315,18471,8274,22094,15884,5968,23551,    22549,1171,18035,23299,113,28367,25040,371,25521,10807,19298,16331,10414,2987,16030,27105,28342,29145,7470,11875,27806,2913,17062,17893,22917,5536,24830    ,17488,18349,28730,1082,28783,26238,29567,26022,23401,189,2019,18513,27073,4794,22501,3739,18935,11758,16808,16560,23961,5787,18267,23868,9730,19393,159    87,27142,18590,20161,26243,633,15695,21340,8447,24877,4551,2596,21810,21079,20629,27610,10092,18588,12951,23099,27136,7389,19377,12650,19367,14069,20966    ,19513,4894,4019,16459,9319,8024,16126,12359,10197,28976,11423,11590,24033,15054,26984,14745,15796,5588,12181,27260,9957,8187,14227,818,4457,8631,7789,2    8019,8802,16174,4068,13605,6668,2566,12843,13038,1980,18531,28190,12041,8147,7233,12506,700,25076,5841,14641,1817,18595,13717,25859,24239,17815,29599,28    757,1738,5526,17402,6254,23906,4878,5235,2841,12940,17251,25504,27630,17800,8989,27405,11705,1199,25909,20967,19371,458,1737,26254,29051,15799,8332,8464    ,21272,26090,11457,7019,5609,17542,27109,1572,2073,19199,4163,22952,29693,25201,19667,1154,20031,7187,1989,20132,21430,19176,23979,5634,18012,18206,5182    ,26005,8359,31,13758,18700,18006,23670,19268,10781,26584,18754,1969,4160,15903,21034,24990,1938,10898,5766,562,28766,11929,16548,14488,17065,13671,6537,    10885,28667,10431,7814,223,26857,2087,26093,29452,19560,20482,21284,29187,17536,15446,3487,9778,2224,23057,14527,29826,856,19457,16302,27760,3344,22919,    8879,27765,19111,15808,18563,26791,13369,10545,28693,16551,11635,7626,7829,5430,28940,11756,831,29249,12142,11452,21741,28472,15981,4332,18030,25029,238    30,21817,15079,6812,6917,4029,2221,19018,8309,27531,6211,29473,4535,16826,14083,10705,23147,14582,1928,9999,18789,12209,14852,24935,20667,29500,29912,23    458,8225,4171,122,24397,26736,24358,17012,4463,862,3163,27196,6772,26229,29177)
year=c(2016,2016,1883,1903,1908,1923,1932,1933,1935,1937,1943,1944,1945,1946,1948,1950,1951,1965,1971,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,    1987,1998,2000,2003,2011,2015,2016,2019,2005,2001,2016,2018,2001,2014,2016,2018,2016,1988,2000,2003,2006,2013,2014,2015,2017,2018,2019,2020,1987,1993,20    01,1987,2008,1987,2020,2019,2018,2016,1987,2002,1992,1967,1971,1976,1979,1980,1981,1984,1986,1987,1988,1990,1992,1996,1998,2000,2002,2004,2006,2008,2010    ,2016,2018,1980,1987,1980,1981,1987,2006,2009,1980,1987,1989,2009,2016,2006,2006,1989,2002,1971,1976,1980,1987,2002,1987,1989,1990,1979,2007,2002,2008,2    016,2006,2016,2004,1987,1981,1986,1989,1990,1992,1996,1998,1999,2007,2008,2010,2015,2019,2007,2010,1987,2001,1961,2002,1987,1989,1990,1961,1970,1971,197    2,1974,1979,1982,1986,2008,2008,1995,2001,1976,1978,1979,1980,1987,2002,2009,2016,2009,1929,1965,1972,1976,1992,1980,1982,1987,1987,1973,1975,1991,1992,    1995,2001,1999,2006,1987,2002,2013,1971,1987,2002,2013,1971,1986,1987,2002,2013,2018,2019,2020,1987,2002,2013,1987,2002,2013,1987,2002,2013,2018,1971,19    87,2002,2013,1979,1998,2001,2010,2013,1987,2002,2013,1971,1987,2002,2006,2009,2013,1979,1996,1998,2013,1971,1978,1987,1989,1997,2002,2013,1967,1971,1976    ,1978,1979,1980,1981,1984,1986,1987,1988,1990,1992,1996,1998,2000,2002,2004,2006,2008,2010,2013,2014,2015,2016,2018,1979,1998,2006,2013,1987,2002,2013,1    970,1971,1981,1987,2002,2006,2009,2013,1990,2003,2005,1987,2002,2013,1987,2002,2013,2016,1987,2002,2013,1971,1986,1987,2002,2007,2013,1979,1998,2013,197    9,1995,1998,2001,2013,1979,1998,2006,2009,2013,1979,1998,2013,1987,2002,2013,1971,1976,1987,2002,2013,1987,2002,2013,1979,1998,2007,2013,1979,1998,2001,    2013,1971,1987,2002,2013,1987,2002,2013,1971,1987,2002,2013,1971,1987,2002,2013,2018,1979,1998,2013,1987,2002,2013,2016,1971,1987,2002,2007,2013,1987,19    89,2002,2013,1979,1998,2013,1987,2002,2013,1979,1998,2001,2013,1987,2002,2013,2016,1987,2002,2013,2016,1971,1987,2002,2013,1987,2002,2013,1979,1998,2013    ,1987,2002,2013,1979,1998,2013,1978,1979,1980,1981,1985,1989,1998,2013,1971,1987,1990,2002,2013,2016,2017,1979,1998,2001,2013,1979,1998,2001,2013,1971,1    979,1998,2001,2013,1987,2002,2013,2018,1987,2002,2013,1979,1998,2013,1979,1998,2001,2013,2016,1979,1987,1998,2001,2013,1979,1998,2006,2013,1979,1998,201    3,1987,2002,2013,1979,1998,2013,1979,1998,2013,1987,2002,2013,2016,1971,1987,2002,2013,1987,2002,2013,1971,1981,1987,2002,2013,1987,2002,2013,1979,1998,    2001,2013,2009,2015,1971,1987,2002,2013,1987,2002,2013,1987,2002,2013,1987)
as.factor(site)
as.factor(species)
as.integer(year)
as.integer(size)
data=data.frame(site,species,size,year)

#Split data into list by species
data_split=split(data,data$species)

#Subset list to separate by number of sites
#To allow for plotting large plots with facet_wrap_pageinate
less20=subset(data_split,n_distinct(site)<20)
plus20=subset(data_split,n_distinct(site)>20)
```

#Chunk to create short figures (i.e, less than 20 sites)
```{r,echo=FALSE, fig.cap=paste("Population size for ", names(less20),"species."),warning=FALSE,message=FALSE,fig.align='center'}

fig.fun1=function(x){
plot1=ggplot(x,aes(x=year, y=size)) + geom_point()+ facet_wrap(~site,scales = "free",ncol = 2)+
  stat_smooth(method="glm.nb") + xlab("Year") + ylab("Population size")+theme_classic() +
  theme(text = element_text(size=20))+theme(strip.text.x = element_text())+
  theme(plot.margin = margin(10, 15, 10, 10))+
  scale_y_continuous(limits=c(0,NA))+
  scale_x_continuous(breaks= scales::breaks_pretty(n=4))

print(plot1)
cat("\n")
  }
invisible(lapply(less20,fig.fun1))

```
#Chunk to create long figures via facet_wrap_paginate (i.e., with >20 sites)
```{r,echo=FALSE, fig.cap=paste("Population size for ", names(plus20),"species"),warning=FALSE,message=FALSE,fig.align='center'}
fig.fun2=function(x){    
p=ggplot(x,aes(x=year, y=size)) + geom_point()+ facet_wrap_paginate(~site,scales = "free",ncol = 2,nrow=6)+
  stat_smooth(method="glm.nb") + xlab("Year") + ylab("Population size")+theme_classic() +
  theme(text = element_text())+theme(strip.text.x = element_text())+
  theme(plot.margin = margin(10, 15, 10, 10))+
  scale_y_continuous(limits=c(0,NA))+
  scale_x_continuous(breaks= scales::breaks_pretty(n=4))
    required_n_pages = n_pages(p)
for(i in 1:required_n_pages){
print(ggplot(x,aes(x=year, y=size)) + geom_point()+ facet_wrap_paginate(~site,scales = "free",ncol = 2,nrow=6,page=i)+
  stat_smooth(method="glm.nb") + xlab("Year") + ylab("Population size")+theme_classic() +
  theme(text = element_text())+theme(strip.text.x = element_text())+
  theme(plot.margin = margin(10, 15, 10, 10))+
  scale_y_continuous(limits=c(0,NA))+
  scale_x_continuous(breaks= scales::breaks_pretty(n=4)))
}}

invisible(lapply(plus20,fig.fun2))
```

I would like all of the same species' plots to print together (in this example, print all species G plots in a row and all species D plots in row) so they aren't alternating with each other. Additionally, is there a way to make sure they are all labeled as the same figure and not considered separate figures (something akin to the longtable/repeat header function for tables in kable)? Any advice or suggestions would be greatly appreciated! :D
4

0 回答 0