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.

Gráfico de dispersão em R

  • 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 básico

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:

Gráfico de dispersão com grupos

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:

Alterar eixo

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:

Gráfico de dispersão com valores ajustados

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

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:

Adicione um título com um nome dinâmico

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:

Adicionar uma legenda

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:

Renomear eixo x e eixo y

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:

Controle a balança

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:

Tema

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:

Salvar parcelas

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")