rá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 lida com limpar e manipular 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 essa etapa for concluída, ele pode 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 for alcançada, o cientista de dados deve considerar a capacidade do leitor de compreender os conceitos e modelos subjacentes .
  • Seus resultados devem ser apresentados em um formato que todos os interessados ​​possam entender. 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.

Neste tutorial, você aprenderá-

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 dos seguintes argumentos:

  • dados
  • mapeamento estético
  • objeto geométrico
  • transformações estatísticas
  • escalas
  • sistema de coordenadas
  • ajustes de posição
  • lapidação

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 xe o eixo y.
  • O sinal + significa que você deseja que R continue lendo o código. Torna o código mais legível ao quebrá-lo.
  • Use geom_point () para o objeto geométrico.

Resultado:

Gráfico de dispersão com grupos

Às vezes, pode ser interessante distinguir os valores por um grupo de dados (ou seja, dados de 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 do 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.

Resultado:

Eixo de mudança

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.

Resultado:

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 de variável. É útil para uso posterior ou 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

Resultado:

Observe que outros métodos de suavização estão disponíveis

  • glm
  • grama
  • loess: valor padrão
  • aro

Adicione informações ao gráfico

Até agora, 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 de dados apenas olhando para 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 que armazenou. Isso evita reescrever todos os códigos cada vez que você adiciona novas informações ao gráfico.
  • Você envolve o título dentro do laboratório ().
  • Código para a cor vermelha da linha
  • se = FALSE: Não exibe o erro padrão
  • tamanho = 1: o tamanho da linha é 1

Resultado:

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)

Resultado:

## [1] 'The first year is 2010'
B <-2018 

paste ('The first year is', A, 'and the last year is', B)

Resultado:

## [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 a média (mtcars $ mpg) armazenada na variável mean_mpg
  • Use o paste () com mean_mpg para criar um título dinâmico retornando o valor médio de mpg

Resultado:

Adicionar uma legenda

Dois detalhes adicionais podem tornar seu gráfico mais explícito. Você está falando sobre a legenda e a legenda. O subtítulo fica logo abaixo do título. A legenda pode informar sobre 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 laboratório (), você adicionou:
    • title = 'Relação entre milhas por hora e drat': Adicionar título
    • subtitle = 'Relacionamento discriminado por classe de engrenagem': Adicionar legenda
    • caption = 'Autores própria computação: 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 mais facilmente

Resultado:

Renomear eixo xe eixo y

As próprias variáveis ​​no conjunto de dados podem nem sempre ser explícitas ou, por convenção, usar _ quando houver várias palavras (ou seja, GDP_CAP). Você não quer que esse nome apareça em 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 laboratório (), você adicionou:
    • x = 'definição Drat': alterar o nome do eixo x
    • y = 'Milha por hora': alterar o nome do eixo y

Resultado:

Controle as escalas

Você pode controlar a escala do eixo.

A função seq () é conveniente quando você precisa criar uma sequência de números. 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ê deseja 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)

Resultado:

## [1] 0 4 8 12 

Você pode controlar a escala dos eixos xey conforme 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 quebras 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, por = 0,2): Crie seis números de 2,4 a 3,4 com uma etapa de 3
    • seq (1, 1,6, por = 0,1): Crie sete números de 1 a 1,6 com um passo de 1

Resultado:

Tema

Finalmente, R nos permite personalizar o enredo com diferentes temas. A biblioteca ggplot2 inclui oito temas:

  • theme_bw ()
  • theme_light ()
  • theme_classis ()
  • theme_linedraw ()
  • theme_dark ()
  • theme_minimal ()
  • theme_gray ()
  • theme_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' )

Resultado:

Salvar plotagens

Após todas essas etapas, é hora de salvar e compartilhar seu gráfico. Você adiciona ggsave ('NOME DO ARQUIVO) 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 plotar 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' )

Resultado:

ggsave('my_fantastic_plot.png')

Resultado:

## Saving 5 x 4 in image

Observação : 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ê deve ver um arquivo denominado 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

Código

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 e

ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = 'y1')

Controle a escala

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

Salve 

ggsave('my_fantastic_plot.png')