El paquete ggparliament
fue desarrollado para permitir crear diagramas de parlamento en ggplot2. La librería proporciona además un conjunto de datos de muestra con datos electorales de varios países.
En este tutorial vamos a utilizar los datos de las elecciones de 2016 del Duma Estatal, Rusia, para todos los ejemplos. Sin embargo, cabe destacar que cada país tendrá su correspondiente tipo de parlamento, por lo que deberías usar el tipo que corresponda según los datos de los que dispongas. Los tipos disponibles son: "semicircle"
, (Estados Unidos, Francia, España, …) "circle"
, "opposing_benches"
(Reino Unido), "classroom"
y "horsehoe"
(Australia, Nueva Zelanda).
# install.packages("ggparliament")
library(ggparliament)
# install.packages("tidyverse")
library(tidyverse)
# Datos
ru <- election_data %>%
filter(country == "Russia" & year == 2016)
Para crear un diagrama de parlamento en ggplot2 con ggparliament
tendrás que transformar tus datos a un formato que el paquete pueda entender. Para ello puedes usar la función parliament_data
, donde puedes especificar tu conjunto de datos original, el tipo de parlamento y su número de filas, los asientos por partido y otros argumentos.
Luego podrás pasar tus datos a ggplot2 y utilizar la función geom_parliament_seats()
. Ten en cuenta que el paquete proporciona un tema personalizado llamado theme_ggparliament
.
# install.packages("ggparliament")
library(ggparliament)
# install.packages("tidyverse")
library(tidyverse)
# Data frame a ser usado
ru_semicircle <- parliament_data(election_data = ru,
type = "semicircle", # Tipo de parlamento
parl_rows = 10, # Número de filas del parlamento
party_seats = ru$seats) # Asientos por partido
ggplot(ru_semicircle, aes(x = x, y = y, colour = party_short)) +
geom_parliament_seats() +
theme_ggparliament() +
labs(title = "Rusia, 2016") +
scale_colour_manual(values = ru_semicircle$colour,
limits = ru_semicircle$party_short)
Si quieres crear otro tipo de parlamento tan solo es necesario pasar otro tipo disponible al argumento type
de la función parliament_data
. En el siguiente ejemplo creamos un gráfico de parlamento circular, utilizado en algunas naciones.
# install.packages("ggparliament")
library(ggparliament)
# install.packages("tidyverse")
library(tidyverse)
ru_circle <- parliament_data(election_data = ru,
type = "circle",
parl_rows = 10,
party_seats = ru$seats)
ggplot(ru_circle, aes(x = x, y = y, colour = party_short)) +
geom_parliament_seats() +
theme_ggparliament() +
labs(title = "Rusia, 2016") +
scale_colour_manual(values = ru_circle$colour,
limits = ru_circle$party_short)
El tipo de parlamento de bancos opuestos se puede seleccionar pasando "opposing_benches"
al argumento type
de la función parliament_data
. Sin embargo, este tipo de parlamento también requiere especificar el argumento group
tal y como se muestra continuación. Ten en cuenta que se ha rotado el gráfico con coord_flip
.
# install.packages("ggparliament")
library(ggparliament)
# install.packages("tidyverse")
library(tidyverse)
ru_ob <- parliament_data(election_data = ru,
type = "opposing_benches",
group = ru$government,
parl_rows = 10,
party_seats = ru$seats)
ggplot(ru_ob, aes(x = x, y = y, colour = party_short)) +
geom_parliament_seats() +
theme_ggparliament() +
labs(title = "Rusia, 2016") +
scale_colour_manual(values = ru$colour,
limits = ru$party_short) +
coord_flip()
El último tipo de parlamento que vamos a revisar es el parlamento tipo “classroom”. De manera similar a los tipos anteriores tan solo es necesario pasar el tipo al argumento correspondiente de la función parliament_data
.
# install.packages("ggparliament")
library(ggparliament)
# install.packages("tidyverse")
library(tidyverse)
ru_classroom <- parliament_data(election_data = ru,
type = "classroom",
parl_rows = 11,
party_seats = ru$seats)
ggplot(ru_classroom, aes(x = x, y = y, colour = party_short)) +
geom_parliament_seats() +
theme_ggparliament() +
labs(title = "Rusia, 2016") +
scale_colour_manual(values = ru$colour,
limits = ru$party_short)
El paquete proporciona funciones adicionales para personalizar los diagramas de parlamento, como etiquetar partidos, dibujar el umbral de mayoría, resaltar partidos en el poder, …
En los siguientes ejemplos vamos a utilizar el diagrama de tipo semicírculo, pero se pueden utilizar las mismas funciones para otros tipos de parlamentos.
La función geom_highlight_government
permite resaltar gobiernos o partidos en control de la legislatura. Además, la función draw_majoritythreshold
permite agregar una línea indicando el umbral para alcanzar la mayoría.
# install.packages("ggparliament")
library(ggparliament)
# install.packages("tidyverse")
library(tidyverse)
ru_semicircle <- parliament_data(election_data = ru,
type = "semicircle",
parl_rows = 10,
party_seats = ru$seats)
ggplot(ru_semicircle, aes(x = x, y = y, colour = party_short)) +
geom_parliament_seats() +
geom_highlight_government(government == 1) +
draw_majoritythreshold(n = 225, label = TRUE, type = "semicircle") +
theme_ggparliament() +
labs(title = "Rusia, 2016") +
scale_colour_manual(values = ru_semicircle$colour,
limits = ru_semicircle$party_short)
También es posible agregar una barra mostrando la proporción de asientos por partido en el parlamento utilizando la función geom_parliament_bar
, tal y como se muestra a continuación.
# install.packages("ggparliament")
library(ggparliament)
# install.packages("tidyverse")
library(tidyverse)
ru_semicircle <- parliament_data(election_data = ru,
type = "semicircle",
parl_rows = 10,
party_seats = ru$seats)
ggplot(ru_semicircle, aes(x = x, y = y, colour = party_short)) +
geom_parliament_seats() +
geom_highlight_government(government == 1) +
geom_parliament_bar(colour = colour, party = party_long, label = TRUE) +
draw_majoritythreshold(n = 225, label = TRUE, type = "semicircle") +
theme_ggparliament() +
labs(title = "R") +
scale_colour_manual(values = ru_semicircle$colour,
limits = ru_semicircle$party_short)
Por último, también puedes agregar etiquetas al diagrama con las funciones draw_partylabels
y draw_totalseats
tal y como se muestra en el siguiente ejemplo.
# install.packages("ggparliament")
library(ggparliament)
# install.packages("tidyverse")
library(tidyverse)
ru_semicircle <- parliament_data(election_data = ru,
type = "semicircle",
parl_rows = 10,
party_seats = ru$seats)
ggplot(ru_semicircle, aes(x = x, y = y, colour = party_short)) +
geom_parliament_seats() +
draw_partylabels(type = "semicircle",
party_names = party_long,
party_seats = seats,
party_colours = colour) +
draw_totalseats(n = 450, type = "semicircle") +
theme_ggparliament() +
labs(title = "Rusia, 2016") +
scale_colour_manual(values = ru_semicircle$colour,
limits = ru_semicircle$party_short)
También te puede interesar