I have a map with 3 classes. I evaluated size of classes in two times. I am using dplyr, ggplot and ggalluvial libraries to present changes from 'First' time to 'Second' time.
data.frame(
First = c("A", "B", "C","A","A"),
Second = c("A", "B", "C","B","C"),
Size = c(83, 61, 32, 28, 16)
) %>%
ggplot(
aes(
axis1 = First,
axis2 = Second,
y = Size ,
fill = Second )) +
geom_alluvium(aes(fill = Second )) +
geom_stratum() +
geom_text(
stat = "stratum",
size = 5,
aes(label = after_stat(stratum))) +
theme_void() +
theme(legend.position = "none")
But I have this figure
Ggalluvial shows no change classes with same color and clases with changes with grey color.
I need to present both axis with same color legend.
How could I do that?
You are trying to map the fill color of the first axis according to the value of Second
, which doesn't make sense (there are three values for Second
where First
== A). You should map the stratum fill to after_stat(stratum)
, as you do for the geom_text
labels:
data.frame(
First = c("A", "B", "C","A","A"),
Second = c("A", "B", "C","B","C"),
Size = c(83, 61, 32, 28, 16)
) %>%
ggplot(
aes(
axis1 = First,
axis2 = Second,
y = Size)) +
geom_alluvium(aes(fill = Second)) +
geom_stratum(aes(fill = after_stat(stratum))) +
geom_text(
stat = "stratum",
size = 5,
aes(label = after_stat(stratum))) +
theme_void() +
theme(legend.position = "none")