Gráficos em R com ggplot2

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


A fim de focar na construção dos diferentes lotes e no uso de {ggplot2}, nos restringiremos a desenhar plotagens básicas (mas lindas) sem camadas desnecessárias. Para fins de integridade, discutiremos brevemente e ilustraremos diferentes camadas para personalizar ainda mais uma trama no final do artigo (consulte esta seção).

Observe que se você ainda tem dificuldade para criar plotagens com {ggplot2} depois de ler este tutorial, você pode achar o addin {esquisse} útil. Este addin permite que você interativamente (isto é, arrastando e soltando variáveis) crie gráficos com o {ggplot2} pacote. De uma chance!

Combinação de linha e pontos

Uma vantagem de {ggplot2} é a capacidade de combinar vários tipos de parcelas e sua flexibilidade no projeto. Por exemplo, podemos adicionar uma linha a um gráfico de dispersão simplesmente adicionando uma camada ao gráfico de dispersão inicial:

ggplot(dat) +
  aes(x = displ, y = hwy) +
  geom_point() +
  geom_line() # add line

Histograma

Um histograma (útil para visualizar distribuições) pode ser traçado usando geom_histogram():

ggplot(dat) +
  aes(x = hwy) +
  geom_histogram()

Por padrão, o número de caixas é igual a 30. Você pode alterar este valor usando o bins argumento dentro do geom_histogram() função:

ggplot(dat) +
  aes(x = hwy) +
  geom_histogram(bins = sqrt(nrow(dat)))

Aqui eu especifico o número de bins para ser igual à raiz quadrada do número de observações (seguindo a regra de Sturge), mas você pode especificar qualquer valor numérico.

Gráfico de densidade

Os gráficos de densidade podem ser criados usando geom_density():

ggplot(dat) +
  aes(x = hwy) +
  geom_density()

Combinação de histograma e densidades

Também podemos sobrepor um histograma e uma curva de densidade no mesmo gráfico:

ggplot(dat) +
  aes(x = hwy, y = ..density..) +
  geom_histogram() +
  geom_density()

Ou sobreponha várias densidades:

ggplot(dat) +
  aes(x = hwy, color = drv, fill = drv) +
  geom_density(alpha = 0.25) # add transparency

O argumento alpha = 0.25 foi adicionado para alguma transparência. Mais informações sobre este argumento podem ser encontradas nesta seção.

Boxplot

Um boxplot (também muito útil para visualizar distribuições) pode ser plotado usando geom_boxplot():

# Boxplot for one variable
ggplot(dat) +
  aes(x = "", y = hwy) +
  geom_boxplot()

# Boxplot by factor
ggplot(dat) +
  aes(x = drv, y = hwy) +
  geom_boxplot()

Também é possível plotar os pontos no boxplot com geom_jitter(), e para variar a largura das caixas de acordo com o tamanho (ou seja, o número de observações) de cada nível com varwidth = TRUE:

ggplot(dat) +
  aes(x = drv, y = hwy) +
  geom_boxplot(varwidth = TRUE) + # vary boxes width according to n obs.
  geom_jitter(alpha = 0.25, width = 0.2) # adds random noise and limit its width

o geom_jitter() A camada adiciona alguma variação aleatória a cada ponto para evitar que eles se sobreponham (um problema conhecido como overplotting). Além disso, o alpha o argumento adiciona alguma transparência aos pontos (veja mais nesta seção) para manter o foco nas caixas e não nos pontos.

Leia Também  Como otimizar um portfólio baseado em metas

Finalmente, também é possível dividir boxplots em vários painéis de acordo com os níveis de uma variável qualitativa:

ggplot(dat) +
  aes(x = drv, y = hwy) +
  geom_boxplot(varwidth = TRUE) + # vary boxes width according to n obs.
  geom_jitter(alpha = 0.25, width = 0.2) + # adds random noise and limit its width
  facet_wrap(~year) # divide into 2 panels

Para um enredo visualmente mais atraente, também é possível usar algumas cores para as caixas dependendo da variável x:

ggplot(dat) +
  aes(x = drv, y = hwy, fill = drv) + # add color to boxes with fill
  geom_boxplot(varwidth = TRUE) + # vary boxes width according to n obs.
  geom_jitter(alpha = 0.25, width = 0.2) + # adds random noise and limit its width
  facet_wrap(~year) + # divide into 2 panels
  theme(legend.position = "none") # remove legend

Nesse caso, é melhor remover a legenda, pois ela se torna redundante. Veja mais informações sobre a legenda nesta seção.

Gráfico de barra

Um gráfico de barras (útil para visualizar variáveis ​​qualitativas) pode ser traçado usando geom_bar():

ggplot(dat) +
  aes(x = drv) +
  geom_bar()

Por padrão, as alturas das barras correspondem às frequências observadas para cada nível da variável de interesse (drv no nosso caso).

Novamente, para um enredo mais atraente, podemos adicionar algumas cores às barras com o fill argumento:

ggplot(dat) +
  aes(x = drv, fill = drv) + # add colors to bars
  geom_bar() +
  theme(legend.position = "none") # remove legend

Também podemos criar um gráfico de barras com duas variáveis ​​qualitativas:

ggplot(dat) +
  aes(x = drv, fill = year) + # fill by years
  geom_bar()

Para comparar as proporções entre os grupos, é melhor fazer com que cada barra tenha a mesma altura usando position = "fill":

ggplot(dat) +
  geom_bar(aes(x = drv, fill = year), position = "fill")

Para desenhar as barras próximas umas das outras para cada grupo, use position = "dodge":

ggplot(dat) +
  geom_bar(aes(x = drv, fill = year), position = "dodge")

Personalização adicional

Etiquetas

As primeiras coisas a personalizar em um enredo são os rótulos para tornar o enredo mais informativo para o público. Podemos facilmente adicionar um título, subtítulo, legenda e editar títulos de eixo com o labs() função:

p 

Como você pode ver no código acima, você pode salvar uma ou mais camadas do gráfico em um objeto para uso posterior. Dessa forma, você pode salvar seu gráfico “principal” e adicionar mais camadas de personalização até obter a saída desejada. Aqui, salvamos o gráfico de dispersão principal em um objeto chamado p e iremos nos referir a ele para as personalizações subsequentes.

Axis ticks

Os ticks do eixo podem ser ajustados usando scale_x_continuous() e scale_y_continuous() para os eixos xey, respectivamente:

# Adjust ticks
p + scale_x_continuous(breaks = seq(from = 1, to = 7, by = 0.5)) + # x-axis
  scale_y_continuous(breaks = seq(from = 10, to = 45, by = 5)) # y-axis

Limites

A maneira mais conveniente de controlar os limites do gráfico é usar novamente o scale_x_continuous() e scale_y_continuous() funções, além do limits argumento:

p + scale_x_continuous(limits = c(3, 6)) +
  scale_y_continuous(limits = c(20, 30))

Também é possível simplesmente pegar um subconjunto do conjunto de dados com o subset() ou filter() função. Veja como subdividir um conjunto de dados se precisar de um lembrete.

lenda

Por padrão, a legenda está localizada no lado direito do gráfico (quando há uma legenda a ser exibida, é claro). Para controlar a posição da legenda, precisamos usar o theme() função, além do legend.position argumento:

p + aes(color = class) +
  theme(legend.position = "top")

Substituir "top" de "left" ou "bottom" para mudar sua posição e por "none" para removê-lo.

O título da legenda pode ser removido com legend.title = element_blank():

p + aes(color = class) +
  theme(
    legend.title = element_blank(),
    legend.position = "bottom"
  )

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

A legenda agora aparece na parte inferior do gráfico, sem o título da legenda.

Forma, cor, tamanho e transparência

Há um grande número de opções para melhorar a qualidade do terreno ou para adicionar informações adicionais. Esses incluem:

  • forma,
  • Tamanho,
  • cor e
  • alfa (transparência).

Podemos, por exemplo, alterar a forma de todos os pontos em um gráfico de dispersão adicionando shape para geom_point(), ou variar a forma de acordo com os valores assumidos por outra variável (nesse caso, o shape argumento deve estar dentro aes()):

# Change shape of all points
ggplot(dat) +
  aes(x = displ, y = hwy) +
  geom_point(shape = 4)

# Change shape of points based on a categorical variable
ggplot(dat) +
  aes(x = displ, y = hwy, shape = drv) +
  geom_point()

Seguindo o mesmo princípio, podemos modificar a cor, o tamanho e a transparência dos pontos com base em uma variável qualitativa ou quantitativa. aqui estão alguns exemplos:

p 

# Change color based on a qualitative variable
p + aes(color = drv)

# Change color based on a quantitative variable
p + aes(color = cty)

# Change color based on a criterion (median of cty variable)
p + aes(color = cty > median(cty))

# Change size of all points
p + geom_point(size = 4)

# Change size of points based on a quantitative variable
p + aes(size = cty)

# Change transparency based on a quantitative variable
p + aes(alpha = cty)

Podemos, é claro, misturar várias opções (forma, cor, tamanho, alfa) para construir gráficos mais complexos:

p + geom_point(size = 0.5) +
  aes(color = drv, shape = year, alpha = cty)

Linhas suaves e de regressão

Em um gráfico de dispersão, é possível adicionar uma linha suave ajustada aos dados:

p + geom_smooth()

No contexto da regressão linear simples, é comum que a linha de regressão seja exibida no gráfico. Isso pode ser feito adicionando method = lm (lm significa modelo linear) no geom_smooth() camada:

p + geom_smooth(method = lm)

Também é possível desenhar uma linha de regressão para cada nível de uma variável categórica:

p + aes(color = drv, shape = drv) +
  geom_smooth(method = lm, se = FALSE)

o se = FALSE argumento remove o intervalo de confiança em torno das linhas de regressão.

Leia Também  Visualizando a pandemia de COVID-19 | R-bloggers

Facetas

facet_grid permite dividir o mesmo gráfico em vários painéis de acordo com os valores de uma ou duas variáveis ​​qualitativas:

# According to one variable
p + facet_grid(. ~ drv)

# According to 2 variables
p + facet_grid(drv ~ year)

Então, é possível adicionar uma linha de regressão a cada faceta:

p + facet_grid(. ~ drv) +
  geom_smooth(method = lm)

facet_wrap() também pode ser usado, conforme ilustrado nesta seção.

Temas

Várias funções estão disponíveis no {ggplot2} pacote para mudar o tema da trama. Os temas mais comuns após o tema padrão (ou seja, theme_gray()) são o preto e branco (theme_bw()), mínimo (theme_minimal()) e clássico (theme_classic()) temas:

# Black and white theme
p + theme_bw()

# Minimal theme
p + theme_minimal()

# Classic theme
p + theme_classic()

Eu tendo a usar o tema mínimo para a maioria dos meus relatórios R Markdown, pois traz os padrões e pontos e não o layout do enredo, mas novamente isso é uma questão de gosto pessoal. Veja mais temas em ggplot2.tidyverse.org/reference/ggtheme.html e no {ggthemes} pacote.

A fim de evitar ter que mudar o tema para cada trama que você criar, você pode mudar o tema para a sessão R atual usando o theme_set() funcionar da seguinte forma:

theme_set(theme_minimal())

Enredo interativo com {plotly}

Você pode facilmente fazer seus gráficos criados com {ggplot2} interativo com o {plotly} pacote:

library(plotly)
ggplotly(p + aes(color = year))

Agora você pode passar o mouse sobre um ponto para exibir mais informações sobre esse ponto. Também existe a possibilidade de aumentar e diminuir o zoom, fazer o download do gráfico, selecionar algumas observações, etc. Mais informações sobre {plotly} para R pode ser encontrado aqui.

Combine plotagens com {patchwork}

Existem várias maneiras de combinar plotagens feitas em {ggplot2}. Na minha opinião, a maneira mais conveniente é com o {patchwork} pacote usando símbolos como +, / e parênteses.

Primeiro precisamos criar alguns gráficos e salvá-los:

p_a 

Agora que temos 3 parcelas salvas em nosso ambiente, podemos combiná-las. Para ter parcelas ao lado uns dos outros simplesmente use o + símbolo:

library(patchwork)
p_a + p_b + p_c

Para exibi-los acima um do outro simplesmente use o / símbolo:

p_a / p_b / p_c

E, finalmente, combiná-los acima e próximo um para o outro, misture +, / e parênteses:

p_a + p_b / p_c

(p_a + p_b) / p_c

Coordenadas de inversão

Inverter as coordenadas do gráfico é útil para criar boxplots horizontais ou quando os rótulos de uma variável são tão longos que se sobrepõem no eixo x. Veja com e sem inverter as coordenadas abaixo:

# without flipping coordinates
p1 

Isso pode ser feito com muitos tipos de plotagem, não apenas com boxplots. Por exemplo, se uma variável categórica tem muitos níveis ou os rótulos são longos, geralmente é melhor inverter as coordenadas para obter um visual melhor:

ggplot(dat) +
  aes(x = class) +
  geom_bar() +
  coord_flip()

Salvar plotagem

o ggsave() A função salvará o gráfico mais recente em seu diretório de trabalho atual, a menos que você especifique um caminho para outra pasta:

ggplot(dat) +
  aes(x = displ, y = hwy) +
  geom_point()

ggsave("plot1.pdf")



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br