I have a for loop to run through a tonne of microbiome data (using phyloseq
) and generate plots for multiple experiments.
ggplot(data_M1, aes(x = Sample, y = Abundance, fill = get(i))) +
geom_bar(stat = "identity")+
facet_wrap(vars(Status, Time.Point, Treatment), scales = "free", ncol=2)+
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())+
guides(fill = guide_legend(reverse = TRUE, keywidth = 1, keyheight = 1, title = i))+
ylab(yaxisname)+
ggtitle(plotname)+
ggsave(ggsavename, last_plot())
What I am trying to do though is make all the "_unclassified" samples/ sequencing data grey... so maybe I need some kind of if statement with str_contains?
Happy to dput a reproducible example if required but someone might have a simple solution.
Thank you!
@camille's comment about a minimal reproducible example is germaine. We need know nothing about your facet
s, guide
s or call to ggsave
to answer your question.
First, generate some test data
library(tidyverse)
d <- tibble(
Species=rep(c("s__reuteri", "s__guilliermondii",
"o__Clostridiales_unclassified", "k__bacteria_unclassified"),
each=4),
Sample=as.factor(rep(1:4, times=4)),
Abundance=runif(16)
)
Generate custom labels and colours
labels <- unique(d$Species)
# Make sure length of availableColours is long enough to accommodate the maximum length of labels
availableColours <- c("red", "blue", "green", "orange", "yellow")
legendColours <- ifelse(str_detect(labels, fixed("unclassified")), "grey", availableColours)
Create the plot
d %>%
ggplot(aes(x=Sample, y=Abundance, fill=Species)) +
geom_bar(stat="identity") +
scale_fill_manual(labels=labels, values=legendColours)
Giving
If you want to "pool" all the unclassified species, then
d1 <- d %>%
mutate(
LegendSpecies=ifelse(
str_detect(
Species,
fixed("unclassified")
),
"Unclassified",
Species
)
)
legendColours <- ifelse(str_detect(unique(d1$LegendSpecies), fixed("Unclassified")), "grey", availableColours)
d1 %>%
ggplot(aes(x=Sample, y=Abundance, fill=LegendSpecies)) +
geom_bar(stat="identity")+
scale_fill_manual(labels=unique(d1$LegendSpecies), values=legendColours)
Giving