We’ll work with an invented data set. So, the colors are not representing any party
setwd("D:/Users/Carlos/Desktop")
dataset <- read.csv("Sankey.csv", header=T, sep=";")
dataset
## Individuo voto.2024 voto.2025 transiciones
## 1 Francisco partido 2 partido 3 partido 2-partido 3
## 2 Isabel partido 2 partido 3 partido 2-partido 3
## 3 Jesús partido 1 partido 3 partido 1-partido 3
## 4 Marta partido 1 partido 1 partido 1-partido 1
## 5 María partido 3 partido 1 partido 3-partido 1
## 6 Juan partido 3 partido 3 partido 3-partido 3
## 7 Pablo partido 3 partido 1 partido 3-partido 1
## 8 Pedro partido 1 partido 3 partido 1-partido 3
## 9 Manuel partido 1 partido 3 partido 1-partido 3
## 10 Marisa partido 1 partido 2 partido 1-partido 2
## 11 Rebeca partido 3 partido 2 partido 3-partido 2
Load the packages
library(dplyr)
library(highcharter)
library(htmlwidgets)
We extract the variables what we need in a new dataset and change the names of the cathegories to be the names of the source and destination nodes, respectively.
datasetSankey <- dataset %>%
select(voto.2024, voto.2025) %>%
mutate(
voto.2024 = case_when(
voto.2024 == "partido 1" ~ "partido 1 (2024)",
voto.2024 == "partido 2" ~ "partido 2 (2024)",
voto.2024 == "partido 3" ~ "partido 3 (2024)"
),
voto.2025 = case_when(
voto.2025 == "partido 1" ~ "partido 1 (2025)",
voto.2025 == "partido 2" ~ "partido 2 (2025)",
voto.2025 == "partido 3" ~ "partido 3 (2025)"
)
)
Finally, we asign the colors of the nodes and run the visualization:
Sankey <- hchart(
data_to_sankey(datasetSankey),
"sankey",
nodes = list(
list(id = "partido 1 (2024)", color = "#3366CC"),
list(id = "partido 1 (2025)", color = "#3366CC"),
list(id = "partido 2 (2024)", color = "#DC3545"),
list(id = "partido 2 (2025)", color = "#DC3545"),
list(id = "partido 3 (2024)", color = "#28A745"),
list(id = "partido 3 (2025)", color = "#28A745")
)
) %>%
hc_title(
text = "Transición de voto 2024-2025",
style = list(fontSize = "18px", fontWeight = "bold")
)
Sankey