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