Data viz: obras de arte

By [map[name:Lucas Moraes. url:https://lucasmoraes.org]] in Data viz facet_wrap() Tidy tuesday Leitura rápida

January 1, 0001

Post mostrando como criar um gráfico facetado, entre alguns recursos adicionais, a partir de dados do Tidy Tuesday da semana de 12-01-2021.

Como de praxe, o objetivo aqui é apenas fazer uso dos dados para criar uma visualização, explorando um pouco dos recursos do ggplot2 e alguns pacotes acessórios.

O dataset atual consiste em informações de cerca de 70.000 obras de arte. Mais sobre o dataset pode ser conferido no repositório dos dados.

Aqui, vou mostrar o passo-a-passo de como cheguei no gráfico abaixo:

## 
## 	Downloading file 1 of 2: `artists.csv`
## 	Downloading file 2 of 2: `artwork.csv`

Extraindo os dados

O primeiro passo é baixar os dados no repositório do Tidy Tuesday. O dataset dessa semana consiste em duas tabelas, artwork e artists, mas aqui vou usar apenas uma, a tabela artwork:

# carregando os pacotes
library(tidyverse)
library(paletteer)
library(rmarkdown)

# baixando a tabela

tuesdata <- tidytuesdayR::tt_load('2021-01-12')
## 
## 	Downloading file 1 of 2: `artists.csv`
## 	Downloading file 2 of 2: `artwork.csv`
artwork <- tuesdata$artwork

Estou interessado em duas colunas dessa tabela: a coluna medium, que classifica as obras de arte de acordo com a técnica utilizada e a coluna acquisitionYear, que consiste no ano em que a obra foi adquirida no acervo:

paged_table(  
  artwork %>% select(medium,acquisitionYear)
)
Existe uma quantidade muito grande de técnicas incluídas na coluna, algumas com certa sobreposição, outras diferindo pouco, pela inclusão de poucas palavras. Não é viável criar um gráfico com todas elas e, sendo assim, vou selecionar as 6 mais frequentes na amostra. Vou armazenar elas em um vetor (`slice_medium`), que depois vou utilizar para filtrar os dados que preciso para o gráfico:
( 
slice_medium <- 
  artwork %>% 
    count(medium) %>% # contar cada caso da coluna
    arrange(desc(n)) %>% # ordenar em ordem decrescente
    na.omit() %>%  # excluir entradas NA
    slice(1:6) %>% # selecionar 6 primeiras entradas
    {.$medium} # selecionar apenas os nomes das técnicas
)
## [1] "Graphite on paper"    "Oil paint on canvas"  "Screenprint on paper"
## [4] "Lithograph on paper"  "Watercolour on paper" "Etching on paper"

Com base nesse vetor, posso selecionar apenas as linhas correspondentes à essas técnicas e fazer o gráfico. As entradas estão em inglês e sim, vou traduzi-las.

Primeira coisa que vou fazer então é isso: selecionar apenas as técnicas acima e passar elas para o bom português:

artwork %>% filter(medium %in% slice_medium) %>% # selecionando apenas as entradas contidas no vetor
  select(medium, acquisitionYear) %>% # selecionando apenas as colunas de interesse
  na.omit() %>% # omitindo entradas NA
  mutate(medium=case_when(medium=="Graphite on paper"~"Grafite em papel", # traduzindo cada técnica
                          medium=="Watercolour on paper"~"Aquarela em papel",
                          medium=="Lithograph on paper"~"Litografia em papel",
                          medium=="Oil paint on canvas"~"Óleo sobre tela",
                          medium=="Etching on paper"~"Água-forte em papel",
                          medium=="Screenprint on paper"~"Impressão em papel"))

Agora já posso começar a trabalhar no gráfico. Quero plotar a densidade dos valores de ano de aquisição, agrupando os dados por tipo de técnica e atribuindo uma cor para cada:

artwork %>% filter(medium %in% slice_medium) %>%
  select(medium, acquisitionYear) %>% 
  na.omit() %>% # 
  mutate(medium=case_when(medium=="Graphite on paper"~"Grafite em papel", 
                          medium=="Watercolour on paper"~"Aquarela em papel",
                          medium=="Lithograph on paper"~"Litografia em papel",
                          medium=="Oil paint on canvas"~"Óleo sobre tela",
                          medium=="Etching on paper"~"Água-forte em papel",
                          medium=="Screenprint on paper"~"Impressão em papel")) %>% 
  
ggplot(aes(x=acquisitionYear,fill=medium)) + # definindo eixo x e cores diferentes para cada categoria
    geom_density() + # gráfico de densidade
    facet_wrap(~medium) # facetar por técnica

O gráfico fica feio pois por padrão, as escalas dos eixos são fixas. Nesse caso isso não é necessário, pois quero ver a distribuição dos valores em relação às técnicas e não aos dados gerais. Sendo assim, posso deixar a escala do eixo y livre:

artwork %>% filter(medium %in% slice_medium) %>% 
  select(medium, acquisitionYear) %>% na.omit() %>% 
  mutate(medium=case_when(medium=="Graphite on paper"~"Grafite em papel",
                          medium=="Watercolour on paper"~"Aquarela em papel",
                          medium=="Lithograph on paper"~"Litografia em papel",
                          medium=="Oil paint on canvas"~"Óleo sobre tela",
                          medium=="Etching on paper"~"Água-forte em papel",
                          medium=="Screenprint on paper"~"Impressão em papel")) %>% 
  ggplot(aes(x=acquisitionYear,fill=medium)) +
    geom_density() + facet_wrap(~medium, 
                                scales = 'free_y') # argumento para deixa a escala y livre


Em seguida, vou alterar o tema e a paleta de cores. Para alterar as cores, estou usando a função scale_fill_paletteer_d(), que vai agir nas cores dos grupos determinados pelo argumento fill do argumento aes da função ggplot. Essa função vem no pacote paletteer, que compila muitas paletas de cores para gráficos, facilitando essa escolha. Algumas dessas paletas estão listadas aqui! Nesse caso usei a paleta appletv do conjunto yarrr. Também vou aproveitar para retirar a legenda desse gráfico, que é um tanto quanto redundante:

artwork %>% filter(medium %in% slice_medium) %>% 
  select(medium, acquisitionYear) %>% na.omit() %>% 
  mutate(medium=case_when(medium=="Graphite on paper"~"Grafite em papel",
                          medium=="Watercolour on paper"~"Aquarela em papel",
                          medium=="Lithograph on paper"~"Litografia em papel",
                          medium=="Oil paint on canvas"~"Óleo sobre tela",
                          medium=="Etching on paper"~"Água-forte em papel",
                          medium=="Screenprint on paper"~"Impressão em papel")) %>% 
  ggplot(aes(x=acquisitionYear,fill=medium)) +
    geom_density() + 
    facet_wrap(~medium, scales = 'free_y') +
    theme_bw() + # alterando tema
    theme(legend.position = "none") + # eliminando a legenda
    scale_fill_paletteer_d("yarrr::appletv") # atribuindo paleta


Por último, vou ajeitar os textos dos eixos e o título:

artwork %>% filter(medium %in% slice_medium) %>% 
  select(medium, acquisitionYear) %>% na.omit() %>% 
  mutate(medium=case_when(medium=="Graphite on paper"~"Grafite em papel",
                          medium=="Watercolour on paper"~"Aquarela em papel",
                          medium=="Lithograph on paper"~"Litografia em papel",
                          medium=="Oil paint on canvas"~"Óleo sobre tela",
                          medium=="Etching on paper"~"Água-forte em papel",
                          medium=="Screenprint on paper"~"Impressão em papel")) %>% 
  ggplot(aes(x=acquisitionYear,fill=medium)) +
    geom_density() + 
    facet_wrap(~medium, scales = 'free_y') +
    theme_bw() + 
    theme(legend.position = "none") + 
    scale_fill_paletteer_d("yarrr::appletv") +
    ylab("Densidade") + # Título do eixo y
    xlab("Ano de aquisição") + # Título do eixo x
    ggtitle("Distribuição dos anos de aquisição de acordo\ncom as técnicas mais frequentes na amostra") # Título do gráfico

E aí está!

A ideia aqui não é analisar os dados, mas algumas conclusões superficiais podem ser extraídas do gráfico, como por exemplo o fato de que as obras de grafite e aquarela em papel possuem datas de aquisição mais antigas ou que o contrário ocorre, no caso das obras de água forte ou litografia em papel.

Posted on:
January 1, 0001
Length:
110 minute read, 23333 words
Categories:
Data viz facet_wrap() Tidy tuesday Leitura rápida
See Also: