Como fazer um gráfico de dispersão no R usando ggplot2

Confira nosso curso online de QGIS

Aprenda a utilizar o pacote ggplot2 para criar gráficos de dispersão no R.

Existe alguma correlação entre a cilindrada de um motor e seu rendimento?

Para responder essa pergunta, utilizaremos gráficos de dispersão para avaliar se há alguma correlação entre elas, sendo que utilizaremos o pacote ggplot2 no R (esse processo também pode ser feito usando a função plot() ou até mesmo no Excel).

Nos acompanhe para aprender como fazer um gráfico de dispersão (scatterplot) no R.

[Postagem Atualizada em 05/06/2018, inclusão de novos códigos no final da postagem]

Nosso código irá iniciar com a função install.packages(), caso você ainda não tenha instalado o pacote ggplot2, seguida da função library() para carrega-lo e da função data() para carregar o conjunto de dados “mpg” do pacote ggplot2.


install.packages(ggplot2)
library(ggplot2)
data("mpg", package = "ggplot2")

O conjunto de dados “mpg” apresenta 234 linhas e 11 variáveis de um banco de dados da EPA (agência de meio ambiente norte americana) sobre o rendimento de automóveis, entre os anos de 1999 e 2008.

Algumas variáveis são: Nome do modelo, número de cilindros e rendimento na cidade.

Criando gráfico de dispersão no ggplot2

Os gráficos gerados pelo ggplot2 devem ser sempre associadas a uma variável, ou seja, utilizando forma x <- y, para posteriormente sendo gerados com a função plot(). Veja o código abaixo:


graf_disp &lt;- ggplot(mpg, aes(x=displ, y=cty)) +
  geom_point(aes(col=fl)) +
  geom_smooth(method="loess", se = F) +
  labs(subtitle = "Eficiência de Combustíveis",
       y = "Eficiência na Cidade (milhas por galão)", x = "Volume de Cilindradas (l)",
       caption = "Fonte: mpg + Blog 2 Engenheiros")

plot(graf_disp)

Note que associamos à variável graf_disp vários itens, onde cada item representa uma parte do gráfico.

No item ggplot(), indicamos quais são os valores de x e y, indicando primeiramente o conjunto de dados (neste caso, mpg), e depois inserimos dentro do parâmetro aes() quem é x e quem é y. O item aes() também mostra como os parâmetros serão apresentados.

Em seguida, utilizamos um sinal de mais (+) para mostrar para o R que há outro elemento para ser considerado.

Neste caso, apresentamos o item geom_point(), a qual apresentará as características dos pontos, tais como tamanho e cores.

Aqui, indicamos que as cores devem ser diferentes para combustíveis diferentes. Onde cada item é:

  • c: GNV;
  • d: Diesel;
  • e: Etanol;
  • p: Premium;
  • r: Combustível comum.

O item geom_smooth() traça um curva/reta representando uma regressão dos dados que plotamos, sendo que method determina o modo de regressão e se mostra se deve ser plotado ou não o intervalo de confiança.

Por fim, temos o item labs() para plotarmos as legendas, títulos e nomes dos eixos.

Relação entre cilindradas e rendimento de automóvel na cidade.
Relação entre cilindradas e rendimento de automóvel na cidade.

A legenda, da forma como está apresentada, não nos diz muita coisa. Como podemos modificar ela?

Para modificar a legenda, iremos adicionar mais um bloco de informações, usaremos scale_color_manual() para mudar o nomes dos rótulos e as suas cores. Confira o código abaixo:


graf_disp + scale_color_manual(labels = c("GNV", "Diesel", "Etanol", "Premium", "Comum"),
values = c("#130912", "#602749", "#17468f", "#639468", "#ed2327")) +
labs(color = "Combustível")

Não precisamos repetir toda as linhas de códigos anteriores para testar novos gráficos, basta usarmos nosso gráfico base (neste caso graf_disp) e adicionarmos outros elementos.

Junto ao elemento scale_color_manual(), também definimos as cores dos pontos pelo item values, fornecendo um vetor com vários códigos hexadecimais de cores.

Em seguida, adicionamos mais um complemento ao item labs() que seria o nome da nossa legenda.

Relação entre cilindradas, eficiência e combustíveis.
Relação entre cilindradas, eficiência e combustíveis.

Agora que geramos nossos gráficos de dispersão, o que ele nos informa? Como interpretar seus dados?

Basicamente, podemos verificar que, de modo geral, conforme aumentamos a cilindrada (volume de deslocamento do motor) do automóvel perdemos eficiência. O raciocínio inverso também é válido, quanto menor a cilindrada, maior o rendimento na cidade.

Entretanto, ao aproximarmos de um volume de 5,5 litros de cilindradas, temos um ligeiro aumento de eficiência.

Teste nosso código utilizando outras variáveis (tais como hwy – rendimento em rodovias, cyl – número de cilindros) e verifique se as correlações se mantem.

Inserindo mais variáveis no ggplot2

Vamos supor que você, além de inserir as variáveis relacionadas ao rendimento na cidade, quer adicionar o rendimento na rodovia (coluna hwy dos dados mpg).

Para realizar esse procedimento, adicione o seguinte código abaixo dos códigos já descritos.


graf_disp2 <- graf_disp + geom_point(aes(y = hwy, col="Green")) + 
  labs(subtitle = "Eficiência de Combustíveis", y = "Eficiência (milhas por galão)", 
       x = "Volume de Cilindradas (l)", caption = "Fonte: mpg + Blog 2 Engenheiros") + 
  scale_color_manual(labels = c("Cidade", "Rodovia"), values = c("Blue", "Red")) +
  labs(color = "")

plot(graf_disp2)

Podemos ainda, trabalhando em cima dos mesmos dados, adicionar duas linhas de regressão.

Porém, para isso, vamos precisar modificar um pouco a estrutura dos nossos dados, removendo variáveis que não estamos trabalhando e rearranjando os dados em um formato com três colunas (utilizando a função mely() do pacote reshape2).


## Adicionando 2 regressões

install.packages('reshape2')
library(reshape2)

# Ajeitando os dados para criar 2 regressões com a função melt()
dados <- as.data.frame(mpg)
dados <- dados[, c(-1, -2, -4, -5, -6, -7, -10, -11)] # Reduzindo o número de variáveis
dadosMelt <- melt(dados, id.vars = "displ")

ggplot(dadosMelt, aes(x = displ, y = value, colour = variable)) +
  geom_smooth() + geom_point() +
  labs(subtitle = "Eficiência de Combustíveis", y = "Eficiência (milhas por galão)",
       x = "Volume de Cilindradas (l)", caption = "Fonte: mpg + Blog 2 Engenheiros") +
  scale_color_manual(labels = c("Cidade", "Rodovia"), values = c("steelblue3", "lightcoral")) +
  labs(color = "")

Os resultados dos dois códigos apresentados acima são os gráficos abaixo.

Resultado do nosso código após adicionar mais uma variável no gráfico.
Resultado do nosso código após adicionar mais uma variável no gráfico.
Resultado após a manipulação dos dados para criar duas linhas de regressão.
Resultado após a manipulação dos dados para criar duas linhas de regressão.

Leia também: Como criar gráficos de barras no R.

Caso você tenha alguma dúvida, fique à vontade e comente abaixo, estaremos respondendo assim que possível.

Consulte mais em: Top 50 ggplot2 visualizations - The master list (with full R code).


Clique na figura abaixo e assine nossa lista de emails para receber nosso ebook "Como criar mapas de localização com ArcGIS 10.x".

Apostila Mapa de Localização Banner

Author: Fernando BS

Engenheiro Ambiental e de Segurança do Trabalho. Atua nas áreas de geoprocessamento, mineração e hidrologia. Busca soluções utilizando softwares como QGIS, R e Python.

3 thoughts on “Como fazer um gráfico de dispersão no R usando ggplot2”

    1. Boa tarde Breno,

      Para construir modelos lineares e não-lineares (regressões), você terá que utilizar as funções lm() e nls() para obter os valores da sua equação da regressão. Aqui, vou utilizar o lm() e elevar nossa variável x ao quadrado e utilizar a função summary() para buscar os valores da equação da regressão e o R2.

      displ2 <- mpg$displ^2
      mpg[12] <- displ2
      names(mpg)[12] <- "displ2"
      quadMOD <- lm(cty ~ displ + displ2, data = mpg)
      summary(quadMOD)

      Para plotar eles no gráfico, você irá usar as funções predict(), geom_line() e annotate().

      valores_x <- 1:8
      previsao <- predict(quadMOD, list(displ = valores_x, displ2 = valores_x^2))
      prev_dados <- data.frame(cbind(valores_x, previsao))

      graf_disp + geom_line(aes(x = valores_x, y = previsao), data = prev_dados) +
      annotate("text", x = 6, y = 32, label = "y = 0.76x^2 - 8.40x + 35.49") +
      annotate("text", x = 6, y = 29, label = "R2 = 0.7177")

      Qualquer dúvida, estamos a disposição.

      1. Muito obrigado Fernando pela atenção e disposição, estou me aprofundando na utilização do software R, sou Engenheiro Agrônomo, atualmente estou fazendo mestrado, estou utilizando o R para rodar as minhas análises e me aprofundar também nas funcionalidade do software, conheci o pacote ggplot2 a pouco tempo, então algumas coisas estou aprendendo a fazer.

Deixe um comentário

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