Gráfico de dispersão em R usando ggplot2 (com exemplo)
Os gráficos são a terceira parte do processo de análise de dados. A primeira parte é sobre extração de dados, a segunda parte trata limpando e manipulando os dados. Por fim, o cientista de dados pode precisar comunicar seus resultados graficamente.
O trabalho do cientista de dados pode ser revisado na imagem a seguir
- A primeira tarefa de um cientista de dados é definir uma questão de pesquisa. Esta questão de pesquisa depende dos objetivos e metas do projeto.
- Depois disso, uma das tarefas mais importantes é a engenharia de recursos. O cientista de dados precisa coletar, manipular e limpar os dados
- Quando esta etapa for concluída, ele poderá começar a explorar o conjunto de dados. Às vezes é necessário refinar e alterar a hipótese original devido a uma nova descoberta.
- Quando o explicativo análise é alcançada, o cientista de dados deve considerar a capacidade do leitor de compreender os conceitos e modelos subjacentes.
- Os seus resultados devem ser apresentados num formato que todas as partes interessadas possam compreender. Um dos melhores métodos para comunicar os resultados são através de um gráfico.
- Os gráficos são uma ferramenta incrível para simplificar análises complexas.
pacote ggplot2
Esta parte do tutorial se concentra em como fazer gráficos/tabelas com R.
Neste tutorial, você usará o pacote ggplot2. Este pacote é construído sobre a base consistente do livro Grammar of graphics escrito por Wilkinson, 2005. ggplot2 é muito flexível, incorpora muitos temas e especificações de plotagem em um alto nível de abstração. Com o ggplot2, você não pode plotar gráficos tridimensionais e criar gráficos interativos.
No ggplot2, um gráfico é composto pelos seguintes argumentos:
- dados,
- mapeamento estético
- objeto geométrico
- transformações estatísticas
- Escalas
- sistema de coordenadas
- ajustes de posição
- facetas
Você aprenderá como controlar esses argumentos no tutorial.
A sintaxe básica do ggplot2 é:
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Gráfico de dispersão
Vamos ver como o ggplot funciona com o conjunto de dados mtcars. Você começa traçando um gráfico de dispersão da variável mpg e da variável drat.
Gráfico de dispersão básico
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Explicação do código
- Primeiro você passa o conjunto de dados mtcars para o ggplot.
- Dentro do argumento aes(), você adiciona o eixo xey.
- O sinal + significa que você deseja que R continue lendo o código. Isso torna o código mais legível ao quebrá-lo.
- Use geom_point() para o objeto geométrico.
Saída:
Gráfico de dispersão com grupos
Às vezes, pode ser interessante distinguir os valores por um grupo de dados (ou seja, dados em nível de fator).
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Explicação do código
- O aes() dentro de geom_point() controla a cor do grupo. O grupo deve ser uma variável de fator. Assim, você converte a engrenagem variável em um fator.
- Ao todo, você tem o código aes(color = factor(gear)) que altera a cor dos pontos.
Saída:
Alterar eixo
Redimensionar os dados é uma grande parte do trabalho do cientista de dados. Em raras ocasiões, os dados vêm em um belo formato de sino. Uma solução para tornar seus dados menos sensíveis a valores discrepantes é redimensioná-los.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Explicação do código
- Você transforma as variáveis xey em log() diretamente dentro do mapeamento aes().
Observe que qualquer outra transformação pode ser aplicada, como padronização ou normalização.
Saída:
Gráfico de dispersão com valores ajustados
Você pode adicionar outro nível de informação ao gráfico. Você pode representar graficamente o valor ajustado de uma regressão linear.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear))) + stat_smooth(method = "lm", col = "#C42126", se = FALSE, size = 1) my_graph
Explicação do código
- gráfico: você armazena seu gráfico no gráfico variável. É útil para uso posterior ou para evitar linhas de códigos muito complexas
- O argumento stat_smooth() controla o método de suavização
- método = “lm”: Regressão linear
- col = “#C42126”: Código para a cor vermelha da linha
- se = FALSE: Não exibe o erro padrão
- tamanho = 1: o tamanho da linha é 1
Saída:
Observe que outros métodos de suavização estão disponíveis
- glm
- gam
- loess: valor padrão
- aro
Adicione informações ao gráfico
Até o momento não adicionamos informações nos gráficos. Os gráficos precisam ser informativos. O leitor deve ver a história por trás da análise dos dados apenas olhando o gráfico, sem consultar documentação adicional. Conseqüentemente, os gráficos precisam de bons rótulos. Você pode adicionar rótulos com a função labs().
A sintaxe básica para lab() é:
lab(title = "Hello Guru99") argument: - title: Control the title. It is possible to change or add title with: - subtitle: Add subtitle below title - caption: Add caption below the graph - x: rename x-axis - y: rename y-axis Example:lab(title = "Hello Guru99", subtitle = "My first plot")
Adicione um título
Uma informação obrigatória a adicionar é obviamente um título.
my_graph + labs( title = "Plot Mile per hours and drat, in log" )
Explicação do código
- my_graph: você usa o gráfico armazenado. Evita reescrever todos os códigos cada vez que você adiciona novas informações ao gráfico.
- Você coloca o título dentro de lab().
- Código para a cor vermelha da linha
- se = FALSE: Não exibe o erro padrão
- tamanho = 1: o tamanho da linha é 1
Saída:
Adicione um título com um nome dinâmico
Um título dinâmico é útil para adicionar informações mais precisas ao título.
Você pode usar a função paste() para imprimir texto estático e texto dinâmico. A sintaxe básica de paste() é:
paste("This is a text", A) arguments - " ": Text inside the quotation marks are the static text - A: Display the variable stored in A - Note you can add as much static text and variable as you want. You need to separate them with a comma
Exemplo:
A <-2010 paste("The first year is", A)
Saída:
## [1] "The first year is 2010"
B <-2018 paste("The first year is", A, "and the last year is", B)
Saída:
## [1] "The first year is 2010 and the last year is 2018"
Você pode adicionar um nome dinâmico ao nosso gráfico, ou seja, a média de mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Explicação do código
- Você cria a média de mpg com mean(mtcars$mpg) armazenado na variável mean_mpg
- Você usa paste() com mean_mpg para criar um título dinâmico retornando o valor médio de mpg
Saída:
Adicionar uma legenda
Dois detalhes adicionais podem tornar seu gráfico mais explícito. Você está falando sobre o subtítulo e a legenda. A legenda fica logo abaixo do título. A legenda pode informar quem fez o cálculo e a fonte dos dados.
my_graph + labs( title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Explicação do código
- Dentro do lab(), você adicionou:
- title = “Relação entre milhas por hora e drat”: Adicionar título
- subtitle = “Relacionamento dividido por classe de equipamento”: Adicionar legenda
- caption = “Cálculo do próprio autor: Adicionar legenda
- Você separa cada nova informação com uma vírgula, ,
- Observe que você quebra as linhas de código. Não é obrigatório e só ajuda a ler o código com mais facilidade
Saída:
Renomear eixo x e eixo y
As próprias variáveis no conjunto de dados podem nem sempre ser explícitas ou, por convenção, usar _ quando há várias palavras (ou seja, GDP_CAP). Você não quer que esse nome apareça no seu gráfico. É importante alterar o nome ou adicionar mais detalhes, como as unidades.
my_graph + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Explicação do código
- Dentro do lab(), você adicionou:
- x = “Drat definição”: Altere o nome do eixo x
- y = “Milhas por hora”: Altere o nome do eixo y
Saída:
Controle a balança
Você pode controlar a escala do eixo.
A função seq() é conveniente quando você precisa criar uma sequência numérica. A sintaxe básica é:
seq(begin, last, by = x) arguments: - begin: First number of the sequence - last: Last number of the sequence - by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
Por exemplo, se você quiser criar um intervalo de 0 a 12 com um passo de 3, você terá quatro números, 0 4 8 12
seq(0, 12,4)
Saída:
## [1] 0 4 8 12
Você pode controlar a escala do eixo xey como abaixo
my_graph + scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) + scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Explicação do código
- A função scale_y_continuous() controla o eixo y
- A função scale_x_continuous() controla o eixo x.
- O parâmetro breaks controla a divisão do eixo. Você pode adicionar manualmente a sequência de números ou usar a função seq():
- seq(1, 3.6, by = 0.2): Crie seis números de 2.4 a 3.4 com um passo de 3
- seq(1, 1.6, by = 0.1): Crie sete números de 1 a 1.6 com um passo de 1
Saída:
Tema
Finalmente, R nos permite personalizar o enredo com diferentes temas. A biblioteca ggplot2 inclui oito temas:
- tema_bw()
- tema_luz()
- tema_classis()
- tema_linedraw()
- tema_escuro()
- tema_mínimo()
- tema_cinza()
- tema_void()
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Saída:
Salvar parcelas
Após todas essas etapas, é hora de salvar e compartilhar seu gráfico. Você adiciona ggsave('NAME OF THE FILE) logo após traçar o gráfico e ele será armazenado no disco rígido.
O gráfico é salvo no diretório de trabalho. Para verificar o diretório de trabalho, você pode executar este código:
directory <-getwd() directory
Vamos traçar seu gráfico fantástico, salvá-lo e verificar a localização
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Saída:
ggsave("my_fantastic_plot.png")
Saída:
## Saving 5 x 4 in image
Note: Apenas para fins pedagógicos, criamos uma função chamada open_folder() para abrir a pasta do diretório para você. Você só precisa executar o código abaixo e ver onde a imagem está armazenada. Você deverá ver um arquivo com o nome my_fantastic_plot.png.
# Run this code to create the function open_folder <- function(dir) { if (.Platform['OS.type'] == "windows") { shell.exec(dir) } else { system(paste(Sys.getenv("R_BROWSER"), dir)) } } # Call the function to open the folder open_folder(directory)
Resumo
Você pode resumir os argumentos para criar um gráfico de dispersão na tabela abaixo:
Objetivo | Code |
---|---|
Gráfico de dispersão básico |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
Gráfico de dispersão com grupo de cores |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
Adicionar valores ajustados |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
Adicionar título |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
Adicionar legenda |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
Renomear x |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
Renomear você |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
Controle a balança |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1) |
Criar registros |
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point() |
Tema |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
Economize |
ggsave("my_fantastic_plot.png") |