Frequentemente precisamos fazer figuras com mais de um gráfico nelas. Estou com preguiça de pensar em exemplos, então vou falar em termos bem gerais mesmo. Então, digamos que você tem seis variáveis-resposta que quer relacionar com uma variável explanatória. Como estou com preguiça de usar dados reais, vamos fazer umas simulações bem simples:
x <- runif(42, 0, 10) y1 <- rnorm(42) y2 <- rnorm(42, x, 3) y3 <- rpois(42, exp(x/10)) y4 <- rnorm(42, 15 + x - 10*x^2, 5) y5 <- exp(rnorm(x)) y6 <- rpois(42, lambda=5)
Nossa variável x vai ser uma distribuição uniforme, variando de 0 a 10. y1 não tem relação com x; y2 tem relação linear; y3 segue uma distribuição de Poisson, com o parâmetro lambda igual a exp(x/10); y4 é uma função quadrática de x; y5 é uma função exponencial de x; e y6 segue uma distribuição de Poisson, sem relação alguma com x.
Como botar isso tudo numa figura só? E como fazer com que isso tudo seja automaticamente salvo no computador?
Para isso, vamos usar os comandos png, par, plot, mtext, e dev.off.
O comando png cria uma arquivo, no formato .png, onde a figura será feita. Ou seja, ao invés de fazermos a figura e a salvarmos em um arquivo, primeiro criamos o arquivo, e depois salvamos a figura nele. Os argumentos são: filename, onde colocamos o nome do arquivo; height, ou a altura da figura; width, ou a largura da figure; unit, que são as unidades em que a altura e a largura são medidas; e res, que é a resolução em dpi (dots per inch, ou pontos por polegada).
Depois usamos o comando par. Este comando define parâmetros gerais da figura a ser feita. Uma coisa que pode ser feita é criar uma figura com espaço para vários gráficos. Assim, se temos seis gráficos, podemos distribuir ele em três linhas e duas colunas; para isso, usamos o argumento mfrow=c(3,2). Se quiséssemos 3 colunas e duas linhas, seria mfrow=c(2,3). Se quiséssemos duas colunas e três linhas, mas com o gráfico 2 abaixo do gráfico 1 (e não do lado), seria mfcol=c(3,2). Ou seja, primeiro as linhas, depois as colunas.
Outros argumentos importantes no par são mar e oma. O argumento mar define o tamanho das margens internas, ou seja, entre cada gráfico e os limites do seu espaço. O argumento oma define as margens externas – entre o conjunto dos gráficos e os limites da figura. As margens é onde vão informações como nomes dos eixos, títulos dos gráficos, escala, etc. Veja figura abaixo. Os tamanhos das margens podem variar, e são sempre especificados na seguinte ordem: abaixo, à esquerda, acima, à direta. Então oma=c(4,3,2,1) significa que teremos 4 linhas abaixo da figura, 3 à esquerda, 2 acima e 1 à direta.

Disposição das figuras ao usarmos o comando par(mfrow=c(3,2)). mar representa margens internas, oma representa margens externas. Sempre na seguinte ordem: embaixo, à esquerda, acima, à direita.
Tendo definido o espaço, usamos comandos plot para fazer os gráficos. E depois de fazer os gráficos, podemos colocar texto nas margens externas. Por exemplo se as variáveis x e y usarem as mesmas unidades de medida em todos os gráficos, não há motivos para repetir elas em todos os gráficos. Assim, podemos usar o comando mtext, que adiciona texto às margens das figuras. Usando o argumento side, definimos o lado (1 em baixo, 2 à esquerda, etc). Colocando outer=T definimos que o texto irá nas margens externas.
Como fica isso tudo então? Assim!
png(filename="figura1.png", height=20, width=20, unit="cm", res=300) par(mfrow=c(3,2), mar=c(3,3,2,2), oma=c(3,3,2,2)) plot(y1 ~ x, main="Gráfico 1") plot(y2 ~ x, main="Gráfico 2") plot(y3 ~ x, main="Gráfico 3") plot(y4 ~ x, main="Gráfico 4") plot(y5 ~ x, main="Gráfico 5") plot(y6 ~ x, main="Gráfico 6") mtext(side=1, text="Meu eixo X lindo", outer=T) mtext(side=2, text="Meu eixo Y lindo", outer=T) dev.off()
O comando dev.off() serve para salvar a figura. Sem ele, o arquivo terá sido criado mas não poderá ser aberto. Nunca esqueçam do dev.off!
Ou seja, nada mais de ficar copiando e colando no power point pra juntar figuras! Usem o comando par e sejam felizes :-) Se tivéssemos deixado as margens internas (mar) maiores, os nomes dos eixos também seriam colocados automaticamente dentro de cada gráfico.
Por hoje é só, pessoal!
Realmente essa função faz maravilhas! Contudo, quando faço gráficos usando o ggplot2, acabo tendo que usar outra função: .
CurtirCurtir
Ah sim! Um dia aprenderei a usar ggplot2 ainda :-)
CurtirCurtir
Oi. Vc sabe juntar gráficos ggplot no R? Estou tentando usar esse tutorial daqui e não consigo. Obrigada
CurtirCurtir
Ah, então, em ggplot seria diferente. Não sei como. Tipo, existem, como entendo, basicamente três abordagens para fazer gráficos em R: usando base; usando ggplot; e usando lattice. Esse tutorial serve para gráficos feitos em base (comando plot e similares). Acredito que haja formas de fazer isso em ggplot, mas seria um jeito bem diferente desse. Eu mesmo não sei usar ggplot… (ainda :-) )
CurtirCurtir
Dá para fazer isso com ggplot2 usando a função “theme_set()”. Você guarda os gráficos em objetos e depois essa função empacota tudo.
CurtirCurtir
Essa funçao é a básica do R, a plot(). Usando o ggplot2, são argumentos que devem ser utilizados.
CurtirCurtir
Pingback: Como fazer figuras para artigos científicos – Sobrevivendo na Ciência
Muito Bom!!
CurtirCurtir
Prof. Pavel, no ggplot2 você deve criar as figuras com um nome (ex: fig_1, fig_2, fig_3, fig_4…) e depois usa a função “grid.arrange(fig_1, fig_2, fig_3, fig_4)”. Para alterar o número de colunas e linhas usa ncol=número de colunas e nrow=número de linhas.
Ex: grid.arrange(fig_1, fig_2, fig_3, fig_4, ncol=2, nrow=2).
Espero ter ajudado. Forte abraço!
CurtirCurtir
Ah, massa! Muito obrigado! :-)
CurtirCurtir