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-2012.
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 consistem em informações acerca de aproximadamente 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:
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.3 ✓ purrr 0.3.4
## ✓ tibble 3.1.2 ✓ dplyr 1.0.5
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## --- Compiling #TidyTuesday Information for 2021-01-12 ----
## --- There are 2 files available ---
## --- Starting Download ---
##
## Downloading file 1 of 2: `artists.csv`
## Downloading file 2 of 2: `artwork.csv`
## --- Download complete ---
Extraindo os dados
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](https://github.com/EmilHvitfeldt/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, 23410 words
- Categories:
- Data viz facet_wrap() Tidy tuesday Leitura rápida
- See Also: