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