Change Fill Order by Factor

I'm wondering if there's a way of changing the fill order of a faceted histogram based on some variable.

For example, let's say I'm studying how fast animals are, and whether that's correlated with them being good or bad.

I'll generate some data to this effect:


# generate animal info
df_a <- tibble(speed = .75 * runif(400)) %>% 
  mutate(animal = "cat",  goodness = "bad")
df_b <- tibble(speed = .75 * runif(100)) %>% 
  mutate(animal = "cat",   goodness = "good")
df_c <- tibble(speed = runif(400)) %>% 
  mutate(animal = "dog",   goodness = "good")
df_d <- tibble(speed = runif(100)) %>% 
  mutate(animal = "dog",   goodness = "bad")

# bind data into one df
df <- bind_rows(df_a, df_b, df_c, df_d) %>% 
  mutate_if(is.character, as.factor)

# plot df
df %>% 
  ggplot(aes(x = speed)) +
  geom_histogram(aes(fill = animal),
                 breaks = seq(0,1, by = .05), 
                 alpha = .75, position = "identity") +
  coord_flip() +
  facet_wrap(~ goodness) + 
  ggtitle("Are good pets faster?")

I get something like:

In this example, everyone can see the distribution of bad animals very easily, whereas the good cats fade into the background.

If I were to supplement my data with some sort of factor, would there be a way to key this factor to the order in which the histogram would draw its fill parameter? e.g. can I make cats be in the background for my first plot, but dogs be in the background for the second plot?

I am not interested in stacking the histogram data with the position = "stacked" option.

Thanks for your help!

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.