Show tow times change map with same color legend with ggalluvial

36 Views Asked by At

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

Figure with color changed

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?

1

There are 1 best solutions below

1
On BEST ANSWER

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") 

enter image description here