data <- read_ods(paste0(path,"/data/budget_sankey.csv"))
nodes <- unique(c(data$source, data$target))
# Attribuer un groupe à chaque nœud (exemple : "Revenus", "Dépenses", etc.)
node_groups <- data.frame(
name = nodes,
group = c(
"REVENUE", # 1 RECETTE FIXE
"REVENUE", # 2 SALAIRE NET
"REVENUE", # 3 RECETTE
"DEPENSE", # 4 DEPENSE FIXE
"REVENUE", # 5 RECETTE VARIABLE
"DEPENSE", # 6 DEPENSE VARIABLE
"REVENUE", # 7 REMBOURSEMENT CREANCE
"INVESTISSEMENT", # 8 INVESTISSEMENT
"DEPENSE", # 9 LOISIRS
"REVENUE", # 10 AIDE TRANSPORT
"REVENUE", # 11 DIVIDENDE ET INTERET
"REVENUE", # 12 TICKET RESTAURANT
"DEPENSE", # 13 LOYER + CHARGE
"DEPENSE", # 14 IMPREVU
"DEPENSE", # 15 FRAIS DE TRANSPORT
"DEPENSE", # 16 FRAIS DE NOURRITURE
"INVESTISSEMENT", # 17 PRÊT
"INVESTISSEMENT", # 18 THESAURISATION
"INVESTISSEMENT", # 19 BOURSE
"INVESTISSEMENT", # 20 EPARNE
"DEPENSE", # 21 DEUTSCHKURS
"DEPENSE", # 22 FRAIS MEDICAUX
"DEPENSE", # 23 FRAIS CHAT
"DEPENSE", # 24 IMPOT
"DEPENSE", # 25 FRAIS DE NOEL
"DEPENSE", # 26 TELEPHONE MOBILE
"DEPENSE", # 27 ELECTRICITE
"DEPENSE", # 28 BBOX
"DEPENSE", # 29 BANQUE
"DEPENSE", # 30 ASSURANCE HABITATION
"DEPENSE", # 31 FRAIS DE VELO
"DEPENSE" # 32 VOCABLE
)
)
# Préparation des données
links <- data.frame(
source = match(data$source, unique(c(data$source, data$target))) - 1,
target = match(data$target, unique(c(data$source, data$target))) - 1,
value = data$value
)
nodes <- data.frame(
name = unique(c(data$source, data$target))
)
# Création du graphique interactif
sankey_widget <-
sankeyNetwork(
Links = links,
Nodes = node_groups,
Source = "source",
Target = "target",
Value = "value",
NodeID = "name",
NodeGroup = "group", # Utilise la colonne 'group' pour les couleurs
colourScale = "d3.scaleOrdinal().range(['#177245', '#d70a53', '#ffa812'])",
fontSize = 14,
nodeWidth = 30,
sinksRight = FALSE,
margin = list(right = 50, left = 50, top = 20, bottom = 20),
iterations = 64
)
#javascript_string <- '
#function(el) {
# d3.select(el).selectAll(".link")
# .style("stroke", d => d.source.color);
#}'
#htmlwidgets::onRender(x = sankey_widget, jsCode = javascript_string)
sankey_widget