Como criar e combinar dois gráficos no R

Aprenda como plotar um, dois e até quatro gráficos simultaneamente usando a função plot() no R.

Em postagens passadas já demonstramos como criar gráficos de barras e de dispersão no R. Mas nessas situações, tínhamos apenas um gráfico para ser plotado. Entretanto, haverá momentos que precisaremos plotar, simultaneamente, mais de um gráfico.

E esse é o foco da postagem de hoje (traduzida do nosso blog Souza’s Data, com mais alguns incrementos do Dr. K-Lo).

Nós utilizaremos as seguintes funções neste tutorial:

  • attach();
  • par();
  • plot();
  • legend().

Carregando a base de dados

Nós utilizaremos a base de dados Iris, a qual já vem instalada como padrão no próprio R. Ela fornece medições de comprimento e largura da pétala e da sépala de três espécies de flores.


# Carregando a base de dados Iris

attach(iris)

A função attach() irá adicionar a nova base de dados no repositório de busca do R. Isso significa que você não precisa criar uma variável para manipular os dados desta base.

Lembre-se que para criar variáveis, você utiliza uma flecha “<-” relacionando a variável ao seu nome/objeto.

Modificando os parâmetros do gráfico

A função responsável pela modificação dos parâmetros dos gráficos é a par(). Por meio dela, podemos mudar a distância entre os gráficos, dos eixos e das margens, entre outros.

Vamos criar dois gráficos comparando a largura e comprimento das pétalas e o segundo comparando a largura e comprimento das sépalas.


par(mfrow = c(1,2), oma = c(4,1,1,1))

plot(iris$Sepal.Length, iris$Sepal.Width)
 
plot(iris$Petal.Length, iris$Petal.Width)

Dentro da função par(), modificamos dois parâmetros, o primeiro deles, mfrow, nos indica a quantidade de linhas e colunas da grade de gráficos (no nosso caso, será uma linha e duas colunas); e o segundo parâmetro, oma, nos informa o tamanho das margens externas na seguinte ordem: inferior, esquerda, superior e direita.

Executamos os comandos que já digitamos e você terá um gráfico semelhante ao abaixo.

Dois gráficos gerados simultaneamente no R
Dois gráficos gerados simultaneamente no R

Note que o R adotou como rótulo nos eixos a própria descrição da nossa variável (iris$Sepal.Length). Como podemos modificar isso?

Renomeando os nomes dos eixos

Para renomear os rótulos dos eixos, vamos utilizar novamente a função plot(), onde vamos inserir os parâmetros xlab e ylab indicando os novos nomes.


par(mfrow = c(1,2), oma = c(4,1,1,1))

plot(iris$Sepal.Length, iris$Sepal.Width, xlab = "Comprimento da Sépala", ylab = "Largura da Sépala")
 
plot(iris$Petal.Length, iris$Petal.Width, xlab = "Comprimento da Pétala", ylab = "Largura da Pétala")

Ao rodarmos esse código, obteremos a imagem abaixo.

Dois gráficos gerados com as funções par() e plot().
Dois gráficos gerados com as funções par() e plot().

Perceba que para as pétalas, há uma correlação entre o comprimento e a largura. Além disso, há um pequeno grupo de dados separados dos demais, será que há diferença entre as espécies?

Plotando cores diferentes por espécies

Para indicar cores diferentes para cada espécies, vamos adicionar o parâmetro col, a qual pode ser alimentado com a variável que irá fornecer as cores, ou com as próprias cores.


par(mfrow = c(2,2), oma = c(4,1,1,1))
plot(iris$Sepal.Length, iris$Sepal.Width, col=iris$Species, xlab = "Comprimento da Sépala", ylab = "Largura da Sépala")
plot(iris$Petal.Length, iris$Petal.Width, col=c("Black", "Blue", "Red"), xlab = "Comprimento da Pétala", ylab = "Largura da Pétala")

plot(iris$Sepal.Length, iris$Sepal.Width, col=c("Black", "Blue", "Red"), xlab = "Comprimento da Sépala", ylab = "Largura da Sépala")
plot(iris$Petal.Length, iris$Petal.Width, col=iris$Species, xlab = "Comprimento da Pétala", ylab = "Largura da Pétala")

Veja que utilizamos dois exemplos para as cores. A primeira delas relaciona o parâmetro col à própria classe iris$species, enquanto a outra é uma variável com três cores, que adiciona as cores preta, azul e vermelha aleatoriamente aos dados.

Adicionando cores aos pontos plotados.
Adicionando cores aos pontos plotados.

Caso no momento de gerar o gráfico acima você recebe a mensagem “Error in plot.new() : figure margins too large”, você terá que aumentar a área em que o RStudio mostra os gráficos, ou então utilizar a função png() para salvar automaticamente o seu gráfico gerado.


png("C:/Users/ferna/Desktop/blog2E.png", width=800, height=600, units="px")

par(mfrow = c(2,2), oma = c(4,1,1,1))
plot(iris$Sepal.Length, iris$Sepal.Width, col=iris$Species, xlab = "Comprimento da Sépala", ylab = "Largura da Sépala")
plot(iris$Petal.Length, iris$Petal.Width, col=c("Black", "Blue", "Red"), xlab = "Comprimento da Pétala", ylab = "Largura da Pétala")
plot(iris$Sepal.Length, iris$Sepal.Width, col=c("Black", "Blue", "Red"), xlab = "Comprimento da Sépala", ylab = "Largura da Sépala")
plot(iris$Petal.Length, iris$Petal.Width, col=iris$Species, xlab = "Comprimento da Pétala", ylab = "Largura da Pétala")

dev.off()

No código acima, não esqueça de substituir o diretório onde você quer salvar a imagem na função png().

E a legenda?

Para adicionarmos a legenda basta utilizar a função legend(), mas como estamos trabalhando com mais de um gráfico, iremos modificar um pouco os parâmetros da função par().


par(xpd = TRUE, mfrow = c(1,2), oma = c(4,1,1,1))

plot(iris$Sepal.Length, iris$Sepal.Width, col=iris$Species, xlab = "Comprimento da Sépala", ylab = "Largura da Sépala")
plot(iris$Petal.Length, iris$Petal.Width, col=iris$Species, xlab = "Comprimento da Pétala", ylab = "Largura da Pétala")

par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE)
plot(0, 0, type = "n", bty = "n", xaxt = "n", yaxt = "n")
legend("bottom", c("Iris Setosa", "Iris Versicolor", "Iris Virginica"), xpd = TRUE, horiz = TRUE,
inset = c(0,0.1), bty = "n", cex = 1, col = c("Black", "Red", "Green"), pch = 1)

Adicionamos os seguintes parâmetros:

  • fig: indica a localização x1, x2, y1 e y2 da nova figura;
  • mar: indica o tamanho das margens inferior, esquerda, superior e direita;
  • new: indica que um novo gráfico deve ser plotado em cima do anterior;
  • xpd: quando é verdadeiro, permite plotar itens fora da área do gráfico.

Posteriormente, adicionamos um gráfico em branco (por isso os valores dentro da função plot() estão zerados ou com um “n”, para que nada seja plotado).

E por fim, temos a função da legenda, onde indicamos a localização dela (“bottom” – canto inferior), quais são os itens dela, distância das margens (inset), tipo de caixa a ser desenhada ao redor dela (bty), tamanho (cex), cores (col) e tipo de ponto (pch).

Resultado final do nosso código com legenda.
Resultado final do nosso código com legenda.

Compartilhe seus resultados nos comentários, e caso tenha tido alguma dificuldade, comente abaixo que ajudaremos.



Clique na figura abaixo e responda nosso questionário para receber nosso ebook "Como criar mapas de localização com ArcGIS 10.x".


Author: Fernando BS

Engenheiro Ambiental e de Segurança do Trabalho. Atua nas áreas de recuperação ambiental, geoprocessamento e ciência do solo. Busca soluções utilizando softwares como ArcGIS, R e MATLAB.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *