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)