The problem is that I am graphing some sankeys and visually it is inefficient for me to see the labels this way, I would like to be able to integrate them to the left, there should be a simpler way but I have not been able to achieve it.
#Data example:
base_preferencia <- data.frame(
Preferencia_1 = c("Bancoppel", "Bancoppel", "Bancoppel", "Banorte", "Banorte", "Banorte"),
Preferencia_2 = c("Bancoppel", "Banorte", "Santander", "Bancoppel", "Banorte", "Santander"),
Freq = c(100, 50, 25, 50, 100, 25),
Colores = c("Azul", "Gris", "Amarillo", "Gris", "Azul", "Amarillo"),
Transparencia = c(0.5, 0.5, 0.5, 0.5, 0.5, 0.5),
Pct = c(0.4, 0.2, 0.1, 0.2, 0.4, 0.1)
)
My sankey code:
{ggplot(base_preferencia, aes(y = Freq, axis1 = Preferencia_1, axis2 = Preferencia_2)) +
geom_alluvium(aes( fill = Colores , alpha = Transparencia), width = 2/12) +
geom_stratum(width = 2/12, fill = "white", color = "gray20") +
geom_text(stat = "stratum", aes(label = after_stat(stratum))) +
geom_text(stat = "flow",
aes(label = ifelse(round(base_preferencia$Pct*100) >= 1 & base_preferencia$Preferencia_1 == "Bancoppel"|
round(base_preferencia$Pct*100) >= 1 & base_preferencia$Preferencia_2 == "Bancoppel",
paste0(round(base_preferencia$Pct*100),"%"), ""))) +
scale_fill_manual(values = alpha(c("#1973cd","#E9E9E9","#f7de0b"), 0.5)) +
lucify_theme_void()+
guides(fill = guide_legend(nrow = 1))+
theme(legend.position = "None")}
my plot:
What I want is for the flow text of the second node to be on the left side and not to the right. enter image description here
One option would be to use two geom_text
layers, one for the left and one for the right labels, where I use stage()
in aes()
to "filter" for the sides.
library(ggalluvial)
base_preferencia$label <-
ifelse(
round(base_preferencia$Pct * 100) >= 1 &
(base_preferencia$Preferencia_1 == "Bancoppel" |
base_preferencia$Preferencia_2 == "Bancoppel"),
paste0(round(base_preferencia$Pct * 100), "%"), ""
)
ggplot(
base_preferencia,
aes(y = Freq, axis1 = Preferencia_1, axis2 = Preferencia_2)
) +
geom_alluvium(
aes(fill = Colores, alpha = Transparencia),
width = 2 / 12
) +
geom_stratum(width = 2 / 12, fill = "white", color = "gray20") +
geom_text(
stat = "stratum", aes(label = after_stat(stratum))
) +
geom_text(
stat = "flow",
aes(
label = stage(label, after_stat = ifelse(x == 1, label, ""))
),
nudge_x = .1,
hjust = 0
) +
geom_text(
stat = "flow",
aes(
label = stage(label, after_stat = ifelse(x == 2, label, ""))
),
nudge_x = -.1,
hjust = 1
) +
scale_fill_manual(
values = alpha(c("#1973cd", "#E9E9E9", "#f7de0b"), 0.5)
) +
# lucify_theme_void() +
guides(fill = guide_legend(nrow = 1)) +
theme(legend.position = "None")