The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
Install infoelectoral and load the packages needed.
# install_packages("infoelectoral")
library(infoelectoral)
# Cargo el resto de librerías
library(dplyr)
library(tidyr)
Download some results. In this case we download the election for Congress of December 2015.
results <- municipios("congreso", "2015", "12") # Descargo los datos
Import the geometry shapes for the municipalities using mapSpain.
library(mapSpain)
shp <- esp_get_munic(year = "2016") %>% select(LAU_CODE)
shp_ccaa <- mapSpain::esp_get_ccaa()
Since most parties have different names throughout the country, you
will need to recode them to group their results. You can use the column
codigo_partido_nacional
included in the resulting
data.frame
that indicates the grouping party code at the
national level. After that you’ll have to create the complete
municipality code (LAU_CODE
) for the merge with the
sf
object and transform the data from long to wide
format.
First, let’s group the parties by
codigo_partido_nacional
and siglas
and sum the
votes to see which party codes correspond to the main parties.
results %>%
group_by(codigo_partido_nacional) %>%
summarise(
siglas_r = paste(unique(siglas)[1], collapse = ", "),
votos = sum(votos)
) %>%
arrange(-votos)
## # A tibble: 56 × 3
## codigo_partido_nacional siglas_r votos
## <chr> <chr> <dbl>
## 1 903316 PP 7216024
## 2 903484 PSOE 5530428
## 3 901079 C´s 3500063
## 4 903736 PODEMOS 3182256
## 5 905033 EN COMÚ 927053
## 6 904850 IULV-CA,UPe 923377
## 7 905008 PODEMOS-COM 671077
## 8 905063 ERC-CATSÍ 599375
## 9 904991 DL 565742
## 10 905041 PODEMOS-En 408417
## # ℹ 46 more rows
Then, we’ll have to recode the party names and calculate the percentage of votes.
results <-
results %>%
mutate(
siglas_r = case_when(
codigo_partido_nacional == "903316" ~ "PP",
codigo_partido_nacional == "903484" ~ "PSOE",
codigo_partido_nacional == "901079" ~ "Cs",
codigo_partido_nacional %in% c("903736", "905033", "905008", "905041") ~ "Podemos",
codigo_partido_nacional == "904850" ~ "IU"
),
# Construyo la columna que identifica al municipio (LAU_CODE)
LAU_CODE = paste0(codigo_provincia, codigo_municipio),
# Calculo el % sobre censo
pct = round((votos / censo_ine) * 100, 2)
) %>%
filter(!is.na(siglas_r)) %>%
# Selecciono las columnas necesarias
select(codigo_ccaa, LAU_CODE, siglas_r, censo_ine, votos_candidaturas, pct)
With the LAU_CODE
column merge the data with the
geometries of the municipalities.
shp <- left_join(shp, results, by = "LAU_CODE")
At last, we may use ggplot2 to visualize the data.
In this case we use purrr::map
to create a list of plots
each of them with their own color gradient scale and
patchwork
to show them together.
library(ggplot2)
library(purrr)
library(patchwork)
colores <- c("#0cb2ff", "#E01021", "#612d62", "#E85B2D", "#E01021")
names(colores) <- c("PP", "PSOE", "Podemos", "Cs", "IU")
# Creo una lista de plots
maps <-
map(names(colores), function(p) {
shp %>%
filter(siglas_r == p) %>%
ggplot() +
geom_sf(
aes(fill = pct, color = pct),
linewidth = 0, show.legend = F
) +
geom_sf(
data = shp_ccaa, fill = NA, color = "black",
linewidth = 0.1
) +
facet_wrap(~siglas_r) +
scale_fill_gradient(
low = "white", high = colores[p],
na.value = "grey90", aesthetics = c("fill", "color")
) +
theme_void()
})
# Uso patchworks para mostrar los plots
wrap_plots(maps, ncol = 2)
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.