# Leemos la base de datos
el_dist <- read.csv("http://segasi.com.mx/clases/cide/datos/cp_2018_dtto.csv")
Vamos a elaborar una grafica de barras en la cual observemos la votacion del bronco a nivel estatal.
Primero: Limpiamos la base:
library(tidyverse)
## ── Attaching packages ───────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.2.1 ✔ purrr 0.3.2
## ✔ tibble 2.1.3 ✔ dplyr 0.8.3
## ✔ tidyr 1.0.0 ✔ stringr 1.4.0
## ✔ readr 1.3.1 ✔ forcats 0.4.0
## ── Conflicts ──────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
names(el_dist)
## [1] "edo_min" "nombre_distrito"
## [3] "cve_edo" "cve_dtto"
## [5] "cve_edo_dtto" "pan"
## [7] "pri" "prd"
## [9] "pvem" "pt"
## [11] "movimiento_ciudadano" "nueva_alianza"
## [13] "morena" "encuentro_social"
## [15] "pan_prd_mc" "pan_prd"
## [17] "pan_mc" "prd_mc"
## [19] "pri_pvem_na" "pri_pvem"
## [21] "pri_na" "pvem_na"
## [23] "pt_morena_pes" "pt_morena"
## [25] "pt_pes" "morena_pes"
## [27] "cand_ind_01" "cand_ind_02"
## [29] "cnr" "vn"
## [31] "total_votos_calculados" "lista_nominal_casilla"
## [33] "v_meade" "v_amlo"
## [35] "v_anaya" "v_bronco"
## [37] "v_nulos_bis" "v_validos"
v_bronco_edo <- el_dist %>%
group_by(edo_min) %>%
summarise(v_bronco_edo = sum(v_bronco, na.rm = TRUE)) %>%
ungroup() %>%
arrange(-v_bronco_edo)
v_bronco_edo
## # A tibble: 32 x 2
## edo_min v_bronco_edo
## <fct> <int>
## 1 Estado de México 383612
## 2 Nuevo León 359816
## 3 Jalisco 246726
## 4 Guanajuato 223058
## 5 Ciudad de México 222994
## 6 Veracruz 132687
## 7 Chihuahua 132164
## 8 Michoacán 122353
## 9 Puebla 113387
## 10 Tamaulipas 110167
## # … with 22 more rows
Segundo: Una vez que limpiamos la base, graficamos las barras.
?ggplot
# De la ayuda vemos que los argumentos son los siguientes:
# ggplot(data = NULL, mapping = aes(), ...,
# environment = parent.frame())
ggplot(data = v_bronco_edo, mapping = aes(x = edo_min, y = v_bronco_edo)) +
geom_bar(stat = "identity")
# Aqui vemos que algo sucedio...
Detalles de la gráfica:
Muy observadores… procederemos a solucionar cada una de sus observaciones:
Vamos a asignar un color a cada estado con los aesteticos. (Notemos que si no especificamos colores, se ponen unos por default).
# Codigo viejo
ggplot(data = v_bronco_edo, mapping = aes(x = edo_min, y = v_bronco_edo)) +
geom_bar(stat = "identity")
# Codigo nuevo
ggplot(data = v_bronco_edo, mapping = aes(x = edo_min, y = v_bronco_edo,
fill = edo_min)) +
geom_bar(stat = "identity")
Esto se solucionaba con el options(scipen = 999) que se me olvidó poner al inicio.
options(scipen = 999)
# Codigo nuevo
ggplot(data = v_bronco_edo, mapping = aes(x = edo_min, y = v_bronco_edo,
fill = edo_min)) +
geom_bar(stat = "identity")
Esto se cambia sumandole una nueva capa de etiquetas, con la función labs de labels.
# Codigo viejo
ggplot(data = v_bronco_edo, mapping = aes(x = edo_min, y = v_bronco_edo,
fill = edo_min)) +
geom_bar(stat = "identity")
# Codigo nuevo (como ya es mucho codigo lo guardamos en un objeto)
plot <- ggplot(data = v_bronco_edo, mapping = aes(x = edo_min, y = v_bronco_edo,
fill = edo_min)) +
geom_bar(stat = "identity") +
labs(title = "Votos del Bronco a nivel estado",
subtitle = "Elecciones para la presidencia nacional de México, 2018", x = "",
y = "Numero de votos",
caption = "Fuente: Datos de @segasi, por lo que son verdad"
)
# Imprimimos la grafica
plot
Para solucionar esto, vamos a sumar una nueva capa de cambio de eje, con la función coord_flip().
plot +
coord_flip()
Pues lo ponemos blanco. Para eso, le sumamos una capa de tema predeterminado (en este caso, fondo blanco con líneas grises codificado en theme_bw()).
# Le aniadimos un fondo blanco.
plot + theme_bw()
Para esto, tendremos que rehacer la gráfica (este debió ser el primer cambio!!!)
# Grafica completa:
plot_final <- ggplot(data = v_bronco_edo,
mapping = aes(x = reorder(edo_min, v_bronco_edo),
y = v_bronco_edo,
fill = edo_min)) +
geom_bar(stat = "identity") +
labs(title = "Votos del Bronco a nivel estado",
subtitle = "Elecciones para la presidencia nacional de México, 2018", x = "",
y = "Numero de votos",
caption = "Fuente: Datos de @segasi, por lo que son verdad"
) +
coord_flip() +
theme_bw()
plot_final
Otras preguntas siguientes que valdría la pena hacerse serían las siguientes:
Podemos quitar esa molesta e invasiva escala?
Podemos modificar el tipo de letra del título y subtítulo?
Podemos personalizar los colores de las barras?
Podemos ponerle unas comas a los numeros de los votos?
Podemos hacer que si el usuario pasa el mouse por cada una de las barras, se despliegue una ventanita bonita?
Pues si, todo eso se puede con ggplot().
Para esto utilizamos los temas
tema_juve <- theme_bw() +
theme(text = element_text(family = "Asap-Bold", color = "#25636e"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
plot.caption=element_text(hjust=1,size=9,colour="grey30"),
plot.subtitle=element_text(face="italic",size=12,colour="grey40"),
plot.title=element_text(size=18,face="bold"),
axis.text.x = element_text(family = "Asap-Bold", color = "#25636e"),
axis.text.y = element_text(family = "Asap-Bold", color = "#25636e"),
legend.position = "none")
plot_final + tema_juve
Si!
ggplot(data = v_bronco_edo,
mapping = aes(x = reorder(edo_min, v_bronco_edo),
y = v_bronco_edo,
fill = edo_min)) +
geom_bar(stat = "identity", fill = c(rep("blue", 15), rep("red", 17))) +
labs(title = "Votos del Bronco a nivel estado",
subtitle = "Elecciones para la presidencia nacional de México, 2018", x = "",
y = "Numero de votos",
caption = "Fuente: Datos de @segasi, por lo que son verdad"
) +
coord_flip() +
theme_bw() +
tema_juve
Si
ggplot(data = v_bronco_edo,
mapping = aes(x = reorder(edo_min, v_bronco_edo),
y = v_bronco_edo,
fill = edo_min)) +
geom_bar(stat = "identity", fill = c(rep("blue", 15), rep("red", 17))) +
labs(title = "Votos del Bronco a nivel estado",
subtitle = "Elecciones para la presidencia nacional de México, 2018", x = "",
y = "Numero de votos",
caption = "Fuente: Datos de @segasi, por lo que son verdad"
) +
coord_flip() +
theme_bw() +
tema_juve +
scale_y_continuous(labels = scales::dollar_format(prefix = "", suffix = " votos"),
expand = c(0.02,0))
Obvio si, pero necesitamos un poco de ayuda de la libreria plotly
plot_fina_final <- ggplot(data = v_bronco_edo,
mapping = aes(x = reorder(edo_min, v_bronco_edo),
y = v_bronco_edo,
fill = edo_min)) +
geom_bar(stat = "identity", fill = c(rep("blue", 15), rep("red", 17))) +
labs(title = "Votos del Bronco a nivel estado",
subtitle = "Elecciones para la presidencia nacional de México, 2018", x = "",
y = "Numero de votos",
caption = "Fuente: Datos de @segasi, por lo que son verdad"
) +
coord_flip() +
theme_bw() +
tema_juve +
scale_y_continuous(labels = scales::dollar_format(prefix = "", suffix = " votos"),
expand = c(0.02,0))
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
ggplotly(plot_fina_final)
Esto se puede modificar mas, pero por hoy, es suficiente.
Fin :)