Juntando gráficos em R

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.

multiplasFiguras.png

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!

figura1.png

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!

Anúncios

Organizando dados: de dados brutos a dados para análise, em R

Semana passada eu escrevi sobre algumas funções para organização de dados em Excel; e ontem no Sobrevivendo na Ciência foi publicado um ótimo texto sobre organização de dados; linkando inclusive para esse texto excelente, sensacional, incrível do Brian McGill; o qual também link para um post do mesmo autor mostrando como fazer algumas coisas em R. Algo em que parece não haver discordância é: existe uma planilha de dados brutos, onde todos seus dados ficam armazenado, e uma ou mais planilhas para análise, uma específica para cada tipo de análise a ser feita; e idealmente a planilha de dados brutos deve ser transformada na planilha de análise via script, não via funções que ensinei semana passada (mas se você não sabe programar, tudo bem, pode usar as funções, eu deixo. rs) Se você quer aprender a de fato organizar dados usando R, recomendo estudar o material do Brian. Mas se você estiver com preguiça ou achar aquilo complexo demais, bom, tem este post aqui 🙂

Continuar lendo

Ensinando R…

Escrevi esse post* pensando em ajudar quem vai dar ministrar seus primeiros minicrusos, aulas ou disciplinas sobre o R ou que utilizem o R. Me baseio na minha experiência ensinando R desde 2014 – no caso, alguns minicursos e algumas disciplinas de pós-graduação. Não é uma baita experiência, mas é melhor do que nada!

Então… algumas dicas ou conselhos, que você pode seguir, adaptar ou ignorar 😉

Continuar lendo