Mi tía Juani es la historiadora de la familia y hace poco me sorprendió con unos textos.
Dado mi interés por la visualización de datos, hice una mini investigación de cómo capturar visualmente un arbol genealógico o las fechas familiares. Con esto me encontré con un código en R que con bastante poco esfuerzo logré adaptar. Aquí los resultados de la primera prueba, estoy contento con ellos.
library(ggplot2)
library(grid)
library(scales)
library(dplyr)
library(plotly)
library(here)
people <- read.csv2(here('data', 'people_aab.csv'),
stringsAsFactors = FALSE)
marriages <- read.csv2(here('data', 'marriages_aab.csv'),
stringsAsFactors = FALSE)
births <- read.csv2(here('data', 'births_aab.csv'),
stringsAsFactors = FALSE)
Mini procesamiento de los datos.
Ahora sí el código de ggplot.
tree <- ggplot() +
geom_rect(data = marriages,
fill= 'lightgrey',
aes(xmin = start,
xmax = end,
ymin = p1,
ymax = p2)) +
geom_segment(data = people %>% arrange(start),
aes(x = start,
xend = end,
y = initials,
yend = initials,
color = gender),
size = 2.5) +
geom_vline(xintercept = seq(as.numeric(as.Date('1915-01-01')),
as.numeric(as.Date('2021-01-01')),
by = 5*365),
color = 'white',
alpha = 0.5) +
geom_segment(data = births,
color = 'grey',
size = 0.5,
aes(x = date,
xend = date,
y = mother,
yend = child)) +
geom_text(data = people,
hjust = -0.05,
family = 'Georgia',
size = 2,
aes(label = initials,
x = start,
y = initials)) + # name
scale_colour_manual(values = c('white', 'lightgreen', 'lightblue')) +
scale_y_discrete(breaks = NULL,
name = '',
limits = rev(people$initials)) +
scale_x_date(breaks = '10 year',
minor_breaks = NULL,
labels = date_format('%Y'),
limits = c(as.Date('1910-01-01'),
as.Date('2025-01-01')),
name = '') +
theme(legend.position = 'none',
panel.background = element_blank(),
text = element_text(family = 'Georgia'),
axis.ticks.length = unit(0,
units = 'cm'),
plot.title = element_text(size = 18, vjust = 1)) +
geom_vline(xintercept = as.numeric(as.Date('2020-02-29')),
color = 'darkgreen',
alpha = 0.5,
linetype = 'dashed',
size = 1) +
labs(title = 'Domingo Brosio Descendants',
subtitle = 'Compiled and vizualized by Andrew Ab')
tree
Dado que quiero explorar algo interativo, va la prueba con plotly.
Nota del autor: creo que esto rompe la página en Firefox, así lo siento por la audiencia (yo incluido) que deseaba un gráfico interactivo.
ggplotly(tree)
Just for the record, aquí están la estructura de la fuente de datos.
head(births)
head(marriages)
head(people %>% select(-name))
Pido disculpas de antemano pues varias fechas no son correctas pero las usé para esta prueba de concepto.
For the sake of privacy, modifiqué un poco el código, porque el plot mostraba los nombres completos y no le he pedido permiso a nadie para hacerlo.
Se puede escalar algo así, pero como todo, tener bien prolija la fuente de datos es importante.
A mi tía por siempre impulsar estas iniciativas. <3
A Nicolas Krutchen por compartir el código en su repo de Github.