Support needed with Sankey Diagram. Kategories are not in order
08:26 11 Nov 2025

help is appreciated. I want to create a sankey diagram using highcharter, which shows a pre timepoint and a post timepoint. I have been working with this code. My problem is, that R sometimes mixes up the order of the numbers on the right side. Post is also supposed to be in order from 1 to 7. Does someone know how to fix this? If yes, please edit my code so I can understand what you did, because I am an R noob.

Thanks

# Pakete laden
library(highcharter)
library(dplyr)
 
# 1️ Daten vorbereiten
dat <- prae_post_aktuell %>%
    select(q39_lq, post_q39_lq) %>%
     filter(!is.na(q39_lq), !is.na(post_q39_lq)) %>%
    mutate(
         q39_lq = factor(as.character(q39_lq), levels = as.character(1:7), ordered = TRUE),
         post_q39_lq = factor(as.character(post_q39_lq), levels = as.character(1:7), ordered = TRUE),
         from = paste0("Pre: ", q39_lq),
        to   = paste0("Post: ", post_q39_lq)
     ) %>%
     count(from, to, name = "weight")
 
 # 2️ Farbverlauf definieren (rot → grün)
 color_map <- c(
    "1" = "#d73027",
     "2" = "#f46d43",
     "3" = "#fdae61",
     "4" = "#888800",
     "5" = "#a6d96a",
     "6" = "#66bd63",
     "7" = "#1a9850"
 )
 
 # 3️ Alle möglichen Pre- und Post-Knoten definieren (in richtiger Reihenfolge!)
 pre_nodes  <- paste0("Pre: ", 1:7)
 post_nodes <- paste0("Post: ", 1:7)
 node_order <- c(pre_nodes, post_nodes)  # Reihenfolge explizit!

# 4️⃣ Sankey-Daten gemäß dieser Reihenfolge sortieren
dat <- dat %>%
     mutate(
         from = factor(from, levels = pre_nodes, ordered = TRUE),
         to   = factor(to,   levels = post_nodes, ordered = TRUE)
    ) %>%
     arrange(from, to)

 # 5️ Nodes erzeugen – in definierter Reihenfolge
nodes <- node_order |>
     lapply(function(x) {
         num <- gsub("[^0-9]", "", x)
        list(
             id = unname(x),
             color = unname(color_map[num]),
             name = unname(x)
         )
     })

 # 6️ Sankey-Diagramm erstellen
 hc <- highchart() %>%
    hc_add_series(
        data = dat,
        type = "sankey",
        hcaes(from = from, to = to, weight = weight),
         nodes = nodes,
         name = "Sorge vor Anfällen (Pre → Post)"
     ) %>%
    hc_plotOptions(
         sankey = list(
             nodeWidth = 20,
             nodePadding = 15,
             curveFactor = 0.4,
             linkOpacity = 0.4
         ),
         series = list(dataLabels = list(style = list(fontSize = "12px")))
    ) %>%
     hc_title(text = "Veränderung der Lebensqualitäts Skala (Pre → Post)") %>%
     hc_tooltip(pointFormat = "Von {point.from} nach {point.to}: {point.weight}") %>%
     hc_chart(height = 600)

 # 7️ Plot anzeigen
print(hc)
r timeline sankey-diagram r-highcharter