Parlamentos en ggplot2 con ggparliament

Librería

ggparliament

Autor principal

Robert Hickman

Datos

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)

Parlamento semicircular

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) 

Parlamento semicurcular con ggparliament en ggplot2

Parlamento circular

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) 

Parlamento circular en R con ggparliament

Parlamento de bancos opuestos

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()

Parlamento de bancos opuestos en R con ggparliament

Parlamento “classroom”

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) 

Parlamento classroom en ggplot2

Personalización adicional

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.

Resaltar el gobierno y dibujar el umbral de mayoría

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) 

Resaltar gobierno o agregar una línea de mayoría en ggparliament

Barra de proporciones

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) 

Agregando una barra en ggparliament

Etiquetas

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) 

Etiquetar partidos en ggplot2

Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon
ggplot2

Elegant Graphics for Data Analysis

Comprar en Amazon
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon

También te puede interesar