Combinar vários gráficos em uma página

Olá pessoal, Estou tendo problemas ao tentar combinar vários gráficos em uma página só. A princípio, o que eu tenho é o seguinte: #-------------------------------------------------------------------------------------------------- # Reproduzir conjunto de dados obs <- c(8.12903225806452, 4.65483870967742, 4.00967741935484, 2.82903225806452, 1.02258064516129, 4.94838709677419, 2.03548387096774, 4.56129032258065, 6.66451612903226, 10.4129032258065, 3.7741935483871, 9.93870967741936) uncorrected <- structure(list(CanESM2 = c(3.71099209785461, 6.68828105926514, 4.2675461769104, 4.29092979431152, 6.47999143600464, 6.30958032608032, 3.28256869316101, 1.06898427009583, 4.01592206954956, 7.88787031173706, 10.8663206100464, 9.14756298065186), GFDL.ESM2M = c(4.56643295288086, 8.36136913299561, 4.6934700012207, 4.62750291824341, 6.34791326522827, 0.916408598423004, 0.111764870584011, 0.570569038391113, 3.05491662025452, 3.29908037185669, 5.98263263702393, 7.52161026000977), MRI.CGCM3 = c(3.94400858879089, 2.48861312866211, 0.663281202316284, 0.422377318143845, 1.49548053741455, 1.8869035243988, 5.35201597213745, 3.94722390174866, 5.0041446685791, 6.11909627914429, 6.37435054779053, 5.9401068687439), NorESM1.M = c(8.83542060852051, 8.36209106445312, 3.22844076156616, 2.86131143569946, 2.05858564376831, 2.39689040184021, 1.06175291538239, 1.03921580314636, 2.49208211898804, 6.83605766296387, 7.95251750946045, 4.8852391242981), inmcm4 = c(5.88600730895996, 8.03514385223389, 3.86212635040283, 1.51728367805481, 3.46821308135986, 1.30993270874023, 0.497318655252457, 0.589299857616425, 1.63358855247498, 3.61927103996277, 4.99840354919434, 10.5596942901611)), .Names = c("CanESM2", "GFDL.ESM2M", "MRI.CGCM3", "NorESM1.M", "inmcm4"), class = "data.frame", row.names = c(NA, -12L)) corrected <- structure(list(CanESM2 = c(4.69295692443848, 6.2362003326416, 4.48602199554443, 4.21368360519409, 6.02497625350952, 5.94498348236084, 3.92529225349426, 1.07059073448181, 3.92306709289551, 8.00215721130371, 10.9688482284546, 9.95723056793213), GFDL.ESM2M = c(6.74847173690796, 10.7781000137329, 6.89084196090698, 7.5780816078186, 8.96726703643799, 3.57111501693726, 1.20403492450714, 2.76221370697021, 4.98387718200684, 5.27927255630493, 8.87845706939697, 9.95864582061768), MRI.CGCM3 = c(5.45173072814941, 3.37272930145264, 2.20000958442688, 1.12101686000824, 2.67246603965759, 3.10278224945068, 6.02392053604126, 4.70185708999634, 5.86025190353394, 6.41299057006836, 7.1956262588501, 7.59840393066406), NorESM1.M = c(9.49540519714355, 9.88559532165527, 4.86537599563599, 4.56189870834351, 3.85974431037903, 4.07706260681152, 2.55634951591492, 2.63215637207031, 4.21092081069946, 7.66422271728516, 8.75070095062256, 5.95497798919678), inmcm4 = c(8.21576976776123, 11.1972188949585, 6.08181619644165, 3.58428621292114, 5.543297290802, 3.46666693687439, 1.88991332054138, 1.94812619686127, 3.71879911422729, 5.70409107208252, 6.85269260406494, 11.8774194717407)), .Names = c("CanESM2", "GFDL.ESM2M", "MRI.CGCM3", "NorESM1.M", "inmcm4"), class = "data.frame", row.names = c(NA, -12L)) # Salvar ajustes originais de margem par.old <- par(no.readonly=T) # Definir novas margens par( mfrow = c(5, 2), mar = c(3, 3, 0.5, 0.5), tcl = -0.3, mgp = c(1.7, 0.4, 0) ) # Loop para plotar os gráficos for (i in 1:length(names(uncorrected))) { # Plot uncorrected vs obs qqplot(as.vector(obs), uncorrected[,i], xlim=c(0,14), ylim=c(0,14), xlab=expression("Obs. precip." ~ (mm ~ day^{-1})), ylab=expression("Mod. precip." ~ (mm ~ day^{-1}))) abline(0, 1) # Then plot corrected vs obs qqplot(as.vector(obs), corrected[,i], xlim=c(0,14), ylim=c(0,14), xlab=expression("Obs. precip." ~ (mm ~ day^{-1})), ylab=expression("Mod. precip." ~ (mm ~ day^{-1}))) abline(0, 1) } # Retomar config. de margem originais par(par.old)#-------------------------------------------------------------------------------------------------- Então, eu preciso apenas ajustar o tamanho da janela no RStudio salvar como pdf. Apesar disso funcionar bem, o problema é que o gráfico resultante fica "longo" demais para caber numa página do Word. Para solucionar isso, pensei em criar um layout em matriz e plotar os gráficos em conjuntos, da seguinte forma: #-------------------------------------------------------------------------------------------------- m <- cbind(c(1,5,9), c(2,6,10), c(3,7,9), c(4,8,10)) layout(m) for (i in 1:length(names(uncorrected))) { # Plot uncorrected vs obs qqplot(as.vector(obs), uncorrected[,i], xlim=c(0,14), ylim=c(0,14), xlab=expression("Obs. precip." ~ (mm ~ day^{-1})), ylab=expression("Mod. precip." ~ (mm ~ day^{-1}))) abline(0, 1) # Then plot corrected vs obs qqplot(as.vector(obs), corrected[,i], xlim=c(0,14), ylim=c(0,14), xlab=expression("Obs. precip." ~ (mm ~ day^{-1})), ylab=expression("Mod. precip." ~ (mm ~ day^{-1}))) abline(0, 1) } #-------------------------------------------------------------------------------------------------- O que *quase* funciona, exceto pelo dois gráficos inferiores que ficam completamente distorcidos em comparação aos demais. Alguém sabe como arrumar isso? Obrigado, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota

Depois de um pouco mais de pesquisa, acabei encontrando uma solução. Basicamente, basta adicionar alguns espaços em branco na matriz que definirá o layout do painel: m <- cbind(c(1,5,0), c(2,6,9), c(3,7,10), c(4,8,0)) layout(m) show.layout(10) # para conferir como ficará o resultado Com isso, o primeiro e último elementos da linha inferior serão alocados mas não usados. Um pequeno comentário em off: depois alguns anos (cerca de cinco) como usuário do R, estou praticamente convencido de que, para as minhas aplicações - que vão de clima a sensoriamento remoto - não existe virtualmente nada que NÃO possa ser feito em R. A pergunta é apenas COMO pode ser feito... Greetings, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota On Sunday, July 31, 2016 4:58 PM, Thiago V. dos Santos via R-br <r-br@listas.c3sl.ufpr.br> wrote: Olá pessoal, Estou tendo problemas ao tentar combinar vários gráficos em uma página só. A princípio, o que eu tenho é o seguinte: #-------------------------------------------------------------------------------------------------- # Reproduzir conjunto de dados obs <- c(8.12903225806452, 4.65483870967742, 4.00967741935484, 2.82903225806452, 1.02258064516129, 4.94838709677419, 2.03548387096774, 4.56129032258065, 6.66451612903226, 10.4129032258065, 3.7741935483871, 9.93870967741936) uncorrected <- structure(list(CanESM2 = c(3.71099209785461, 6.68828105926514, 4.2675461769104, 4.29092979431152, 6.47999143600464, 6.30958032608032, 3.28256869316101, 1.06898427009583, 4.01592206954956, 7.88787031173706, 10.8663206100464, 9.14756298065186), GFDL.ESM2M = c(4.56643295288086, 8.36136913299561, 4.6934700012207, 4.62750291824341, 6.34791326522827, 0.916408598423004, 0.111764870584011, 0.570569038391113, 3.05491662025452, 3.29908037185669, 5.98263263702393, 7.52161026000977), MRI.CGCM3 = c(3.94400858879089, 2.48861312866211, 0.663281202316284, 0.422377318143845, 1.49548053741455, 1.8869035243988, 5.35201597213745, 3.94722390174866, 5.0041446685791, 6.11909627914429, 6.37435054779053, 5.9401068687439), NorESM1.M = c(8.83542060852051, 8.36209106445312, 3.22844076156616, 2.86131143569946, 2.05858564376831, 2.39689040184021, 1.06175291538239, 1.03921580314636, 2.49208211898804, 6.83605766296387, 7.95251750946045, 4.8852391242981), inmcm4 = c(5.88600730895996, 8.03514385223389, 3.86212635040283, 1.51728367805481, 3.46821308135986, 1.30993270874023, 0.497318655252457, 0.589299857616425, 1.63358855247498, 3.61927103996277, 4.99840354919434, 10.5596942901611)), .Names = c("CanESM2", "GFDL.ESM2M", "MRI.CGCM3", "NorESM1.M", "inmcm4"), class = "data.frame", row.names = c(NA, -12L)) corrected <- structure(list(CanESM2 = c(4.69295692443848, 6.2362003326416, 4.48602199554443, 4.21368360519409, 6.02497625350952, 5.94498348236084, 3.92529225349426, 1.07059073448181, 3.92306709289551, 8.00215721130371, 10.9688482284546, 9.95723056793213), GFDL.ESM2M = c(6.74847173690796, 10.7781000137329, 6.89084196090698, 7.5780816078186, 8.96726703643799, 3.57111501693726, 1.20403492450714, 2.76221370697021, 4.98387718200684, 5.27927255630493, 8.87845706939697, 9.95864582061768), MRI.CGCM3 = c(5.45173072814941, 3.37272930145264, 2.20000958442688, 1.12101686000824, 2.67246603965759, 3.10278224945068, 6.02392053604126, 4.70185708999634, 5.86025190353394, 6.41299057006836, 7.1956262588501, 7.59840393066406), NorESM1.M = c(9.49540519714355, 9.88559532165527, 4.86537599563599, 4.56189870834351, 3.85974431037903, 4.07706260681152, 2.55634951591492, 2.63215637207031, 4.21092081069946, 7.66422271728516, 8.75070095062256, 5.95497798919678), inmcm4 = c(8.21576976776123, 11.1972188949585, 6.08181619644165, 3.58428621292114, 5.543297290802, 3.46666693687439, 1.88991332054138, 1.94812619686127, 3.71879911422729, 5.70409107208252, 6.85269260406494, 11.8774194717407)), .Names = c("CanESM2", "GFDL.ESM2M", "MRI.CGCM3", "NorESM1.M", "inmcm4"), class = "data.frame", row.names = c(NA, -12L)) # Salvar ajustes originais de margem par.old <- par(no.readonly=T) # Definir novas margens par( mfrow = c(5, 2), mar = c(3, 3, 0.5, 0.5), tcl = -0.3, mgp = c(1.7, 0.4, 0) ) # Loop para plotar os gráficos for (i in 1:length(names(uncorrected))) { # Plot uncorrected vs obs qqplot(as.vector(obs), uncorrected[,i], xlim=c(0,14), ylim=c(0,14), xlab=expression("Obs. precip." ~ (mm ~ day^{-1})), ylab=expression("Mod. precip." ~ (mm ~ day^{-1}))) abline(0, 1) # Then plot corrected vs obs qqplot(as.vector(obs), corrected[,i], xlim=c(0,14), ylim=c(0,14), xlab=expression("Obs. precip." ~ (mm ~ day^{-1})), ylab=expression("Mod. precip." ~ (mm ~ day^{-1}))) abline(0, 1) } # Retomar config. de margem originais par(par.old)#-------------------------------------------------------------------------------------------------- Então, eu preciso apenas ajustar o tamanho da janela no RStudio salvar como pdf. Apesar disso funcionar bem, o problema é que o gráfico resultante fica "longo" demais para caber numa página do Word. Para solucionar isso, pensei em criar um layout em matriz e plotar os gráficos em conjuntos, da seguinte forma: #-------------------------------------------------------------------------------------------------- m <- cbind(c(1,5,9), c(2,6,10), c(3,7,9), c(4,8,10)) layout(m) for (i in 1:length(names(uncorrected))) { # Plot uncorrected vs obs qqplot(as.vector(obs), uncorrected[,i], xlim=c(0,14), ylim=c(0,14), xlab=expression("Obs. precip." ~ (mm ~ day^{-1})), ylab=expression("Mod. precip." ~ (mm ~ day^{-1}))) abline(0, 1) # Then plot corrected vs obs qqplot(as.vector(obs), corrected[,i], xlim=c(0,14), ylim=c(0,14), xlab=expression("Obs. precip." ~ (mm ~ day^{-1})), ylab=expression("Mod. precip." ~ (mm ~ day^{-1}))) abline(0, 1) } #-------------------------------------------------------------------------------------------------- O que *quase* funciona, exceto pelo dois gráficos inferiores que ficam completamente distorcidos em comparação aos demais. Alguém sabe como arrumar isso? Obrigado, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e fornea cdigo mnimo reproduzvel.
participantes (1)
-
Thiago V. dos Santos