I have a ggplot with 3 variables. I want to add a 4th variable "circumstances_bite_avoidability" which would be denoted by the coloured border of the bars. How do I do this? If it can be achieved, I don't have to make a separate graph just to show that remaining variable.
My ggplot code:
library(tidyverse)
library (ggpattern)
sur %>%
filter(!(species_broad %in% c("Monkey", "Cattle"))) %>%
drop_na(circumstances_bite_broad_intended) %>%
add_count(species_broad) %>%
mutate(y_species_broad =
reorder(
factor(paste0(species_broad, "\n", "(n = ", n, ")")),
as.numeric(species_broad)
)) %>%
ggplot(aes(y= y_species_broad, fill=circumstances_bite_broad, pattern = circumstances_bite_broad_intended)) +
geom_bar_pattern(
colour = "black",
position = "fill",
pattern_density = 0.1,
pattern_spacing = 0.015,
pattern_key_scale_factor = 0.9
) +
scale_x_continuous(labels=c("0","25%","50%","75%","100%")) +
labs(x="Proportion of responses", y="Animal species", fill="Circumstances", pattern="Intentional Human Engagement") +
ggtitle("Circumstances of bite in different animal species") +
scale_fill_manual(values =c("Intentional Human Engagement" = "#EC7979",
"Unintentional Human Engagement" = "lightblue",
"Apparently unprovoked" = "darkblue")) +
scale_pattern_manual(values=c("Threatening Engagement" = "stripe",
"Friendly Engagement" = "circle",
"Practical Engagement" = "crosshatch",
"Unintentional Human Engagement" = "none",
"Apparently unprovoked" = "none"),
breaks = c("Threatening Engagement", "Friendly Engagement", "Practical Engagement") )+
theme(legend.key = element_rect(fill = "white")) +
guides(pattern = guide_legend(override.aes = list(fill = "white")),
fill = guide_legend(override.aes = list(pattern = "none")))
My data:
structure(list(species_broad = structure(c(1L, 1L, 1L, 2L, 1L,
1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 3L, 5L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 3L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 2L, 2L, 2L, 3L, 1L, 2L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 3L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L,
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 2L, 1L, 1L, 1L,
1L, 3L, 1L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 3L, 3L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 3L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 3L, 2L, 2L, 3L, 1L, 1L, 1L, 1L, 3L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 4L, 1L, 1L, 1L, 3L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 3L,
1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 1L, 1L,
1L, 2L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 3L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 3L, 1L), levels = c("Dog",
"Cat", "Rodent", "Monkey", "Cattle"), class = "factor"), circumstances_bite_broad_intended = structure(c(2L,
4L, 1L, 3L, 4L, 4L, 4L, 5L, 5L, 3L, 5L, 1L, 4L, 5L, 5L, 1L, 5L,
5L, 2L, 5L, 4L, 3L, 5L, 2L, 2L, 5L, 4L, 3L, 3L, 5L, 1L, 5L, 1L,
1L, 5L, 5L, 4L, 4L, 5L, 1L, 5L, 5L, 1L, 1L, 5L, 5L, 2L, 3L, 5L,
NA, 4L, 5L, 4L, 4L, 4L, 1L, 4L, 1L, 5L, 4L, 5L, 2L, 5L, 1L, 3L,
1L, 2L, 4L, 5L, 5L, 1L, 5L, 5L, 5L, 5L, 5L, 5L, 2L, NA, 1L, 2L,
3L, 5L, 1L, 2L, 3L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 1L, 4L, 4L, 3L,
4L, 3L, 4L, 3L, 4L, 5L, 4L, 2L, 4L, 3L, 4L, 2L, 4L, 3L, 5L, 1L,
5L, 5L, 3L, 2L, 2L, 5L, 4L, 4L, 4L, 4L, 4L, 3L, 5L, 3L, 4L, 4L,
4L, 1L, 1L, 2L, 4L, 5L, 4L, 4L, 4L, 3L, 4L, 5L, 5L, 4L, 4L, 5L,
5L, 5L, 5L, 4L, 4L, 5L, 4L, 2L, 5L, 5L, 5L, 5L, 3L, 5L, 1L, 5L,
4L, 3L, 5L, 1L, 2L, 2L, 4L, 4L, 4L, 5L, 4L, 5L, 5L, 4L, 2L, 4L,
2L, 4L, 4L, 4L, 4L, 2L, 3L, 2L, 2L, 4L, 4L, 1L, 5L, 4L, 4L, 4L,
4L, 4L, 4L, 1L, 4L, 2L, 4L, 3L, 5L, 5L, 2L, 4L, 1L, 4L, 2L, 4L,
4L, 4L, 4L, 4L, 1L, 1L, 2L, 1L, 4L, 5L, 4L, 4L, 4L, 4L, 4L, 2L,
4L, 4L, 3L, 5L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
4L, 2L, 3L, 1L, 1L, 4L, 4L, 4L, 4L, 1L, 4L, 4L, 4L, 4L, 5L, 4L,
2L, 4L, 4L, 4L, 4L, 2L, 4L, 4L, 2L, 5L, 5L, 5L, 5L, 4L, 4L, 4L,
5L, 5L, 5L, 4L, 1L, 4L, 4L, 5L, 1L, 5L, 2L, 1L, 2L, 1L, 4L, 4L,
4L, 5L, 2L, 4L, 2L, 4L, 4L, 4L, 2L, 5L, 4L, 4L, 4L, 1L, 4L, 3L,
4L, 4L, 2L, 5L, 2L, 2L, 3L, 5L, 2L, 4L, 5L, 1L, 4L, 4L, 4L, 2L,
4L, 5L, 3L, 2L, 4L, 3L, 4L, 4L, 4L, 5L, 4L, 1L, 4L, 4L, 5L, 4L,
4L, 5L, 4L, 5L, 4L, 4L, 4L, 5L, 2L, 1L, 3L, 5L, 4L, 5L, 5L, 5L,
1L, 5L), levels = c("Threatening Engagement", "Friendly Engagement",
"Practical Engagement", "Unintentional Human Engagement", "Apparently unprovoked"
), class = "factor"), circumstances_bite_broad = structure(c(1L,
2L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 1L, 3L, 1L, 2L, 3L, 3L, 1L, 3L,
3L, 1L, 3L, 2L, 1L, 3L, 1L, 1L, 3L, 2L, 1L, 1L, 3L, 1L, 3L, 1L,
1L, 3L, 3L, 2L, 2L, 3L, 1L, 3L, 3L, 1L, 1L, 3L, 3L, 1L, 1L, 3L,
NA, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 1L, 3L, 2L, 3L, 1L, 3L, 1L, 1L,
1L, 1L, 2L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, NA, 1L, 1L,
1L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 3L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 3L, 1L,
3L, 3L, 1L, 1L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 1L, 2L, 2L,
2L, 1L, 1L, 1L, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 3L, 3L, 2L, 2L, 3L,
3L, 3L, 3L, 2L, 2L, 3L, 2L, 1L, 3L, 3L, 3L, 3L, 1L, 3L, 1L, 3L,
2L, 1L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 2L, 3L, 3L, 2L, 1L, 2L,
1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 3L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 3L, 3L, 1L, 2L, 1L, 2L, 1L, 2L,
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 1L,
2L, 2L, 1L, 3L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 3L, 2L,
1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 3L, 3L, 3L, 3L, 2L, 2L, 2L,
3L, 3L, 3L, 2L, 1L, 2L, 2L, 3L, 1L, 3L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 3L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 1L, 2L, 1L,
2L, 2L, 1L, 3L, 1L, 1L, 1L, 3L, 1L, 2L, 3L, 1L, 2L, 2L, 2L, 1L,
2L, 3L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 3L, 2L, 1L, 2L, 2L, 3L, 2L,
2L, 3L, 2L, 3L, 2L, 2L, 2L, 3L, 1L, 1L, 1L, 3L, 2L, 3L, 3L, 3L,
1L, 3L), levels = c("Intentional Human Engagement", "Unintentional Human Engagement",
"Apparently unprovoked"), class = "factor"), circumstances_bite_avoidability = structure(c(1L,
2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L,
2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L,
NA, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, NA, 1L, 1L,
1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L,
2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L,
2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L,
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L,
2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L,
2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
1L, 2L), levels = c("Avoidable", "Unavoidable"), class = "factor")), row.names = c(NA,
-355L), class = "data.frame")