Anoche me iba a ir a la cama tras escuchar un podcast, pero al final estuve entretenido debatiendo con Raúl Vaquerizo, Alberto González Almuiña y Jesús Lagos , sobre los gráficos con dos ejes de ordenadas. Aquí os dejo el tweet que puso Raúl.
Pues yendo al post que puso Raúl construía el siguiente gráfico.
library(tidyverse)
library(magrittr)
library(ggplot2)
url='http://www.businessandeconomics.mq.edu.au/our_departments/Applied_Finance_and_Actuarial_Studies/acst_docs/glms_for_insurance_data/data/claimslong.csv'
df <- read.csv(url)
resumen <- df %>% group_by(period) %>%
summarise(pct_exposicion = n(),
frecuencia = sum(claim)/n())
g2 <- ggplot(resumen,aes(x = period)) +
geom_col(aes(y = pct_exposicion), fill="yellow",alpha=0.7) +
geom_line(aes(y=frecuencia * 500000 ), group = 1,color="red") +
geom_text(aes(y = frecuencia * 500000, label = paste(round(frecuencia*100),'%')),
vjust = 1.4, color = "red", size = 2) +
scale_y_continuous(sec.axis = sec_axis(~.* 500000, name = "Frecuencia [%]"))
g2
Y bueno, no está mal, pero no me acaba de gustar, sobre todo porque al fin y al cabo todos sus períodos tienen el mismo valor
resumen
## # A tibble: 3 × 3
## period pct_exposicion frecuencia
## <int> <int> <dbl>
## 1 1 40000 0.131
## 2 2 40000 0.141
## 3 3 40000 0.156
Ahora que lo pienso, casi que con la tabla valdría. Pero que pasaría si tenemos diferentes valores
set.seed(155)
resumen %<>%
mutate(pct_exposicion = pct_exposicion * 10*runif(3))
resumen
## # A tibble: 3 × 3
## period pct_exposicion frecuencia
## <int> <dbl> <dbl>
## 1 1 315266. 0.131
## 2 2 173523. 0.141
## 3 3 304162. 0.156
ggplot(resumen,aes(x = period)) +
geom_col(aes(y = pct_exposicion), fill="yellow",alpha=0.7) +
geom_line(aes(y=frecuencia * 500000 , group=), group = 1,color="red") +
geom_text(aes(y = frecuencia * 500000, label = paste(round(frecuencia*100),'%')),
vjust = 1.4, color = "red", size = 2) +
scale_y_continuous(sec.axis = sec_axis(~.* 500000, name = "Frecuencia [%]"))
Me gusta aún menos este gráfico, yo propongo el siguiente en su lugar.
resumen %>%
ggplot(aes(x = period, y = frecuencia)) +
geom_point(aes(size=pct_exposicion)) +
geom_line() +
scale_size_continuous(range=c(4, 10)) +
scale_y_continuous(labels = scales::percent, limits = c(0,0.2))
Dónde representamos la variable frecuencia en el eje de ordenadas y con el tamaño de los puntos representamos la otra variable.
comments powered by Disqus