Como fazer um gráfico de dispersão no R usando ggplot2
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 <- 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.
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.
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.
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).
Como plotar no gráfico da regressão quadrática, a equação e o R²?
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.
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.