I tried to create an ordered bar plot (admixture plot) with facets as described here by @Axeman. However, instead of arranging the individuals by their corresponding clusters (pop; V1 - V4 in the example in the link), I'd like to group it by their respective species.
So, what I get is a stacked bar plot with facets whereas the facets represent the species and where the probabilities for the group assignments within the species should be ordered by the likely assignment
How do I have to adjust the R code? Any recommendations?
Here is the R code for the solution from the linked thread ...
library(tidyverse)
plot_data <- tbl %>%
mutate(id = row_number()) %>%
gather('pop', 'prob', V1:V4) %>%
group_by(id) %>%
mutate(likely_assignment = pop[which.max(prob)],
assingment_prob = max(prob)) %>%
arrange(likely_assignment, desc(assingment_prob)) %>%
ungroup() %>%
mutate(id = forcats::fct_inorder(factor(id)))
ggplot(plot_data, aes(id, prob, fill = pop)) +
geom_col() +
facet_grid(~likely_assignment, scales = 'free', space = 'free')
... and here the example data set ...
tbl = structure(list(V1 = c(1e-05, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.430202, 0.99997,
0.801974, 1e-05, 0.99997, 0.99997, 1e-05, 0.999968, 1e-05, 1e-05,
1.3e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.99997, 1e-05, 1.8e-05,
1e-05, 1.2e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1.1e-05, 1e-05, 0.642925,
1e-05, 0.99997, 0.99997, 1e-05, 1e-05, 0.99997, 1e-05, 0.99997,
0.99997, 0.287976, 1e-05, 0.99997, 0.99997, 0.99997, 1e-05, 0.533994,
0.99997, 0.99997, 1e-05, 0.99997, 1e-05, 0.99997, 1e-05, 1e-05,
0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 0.307669, 0.99997,
0.604114, 0.604792, 0.29646, 0.514252, 0.99997, 0.798616, 0.516577,
1e-05, 1e-05, 1e-05, 1e-05, 0.449886, 1e-05, 1e-05, 1e-05, 1e-05,
0.790272, 1e-05, 0.576786, 0.776731), V2 = c(0.99997, 1e-05,
1e-05, 1e-05, 0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 0.99997,
0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1.2e-05, 0.99997, 1e-05, 1e-05, 1e-05, 0.99997, 1e-05,
0.99997, 0.99997, 1e-05, 1e-05, 0.528138, 0.99997, 1e-05, 1e-05,
1e-05, 1e-05, 0.99997, 1e-05, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.712004, 0.99997,
1e-05, 1e-05, 1e-05, 0.99997, 0.465986, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.99997, 0.99997,
0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.05777,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.591857, 0.99997, 1e-05,
0.99997, 0.99997, 0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05
), V3 = c(1e-05, 1e-05, 1e-05, 0.541112, 1e-05, 1e-05, 0.329922,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.198006,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.999967, 0.451508,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.749225,
1e-05, 0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 0.442211,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.188,
1e-05, 0.248756, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 0.395866, 0.395188, 0.293429, 0.427968,
1e-05, 0.201364, 0.483403, 1e-05, 1e-05, 0.408123, 1e-05, 0.550094,
1e-05, 1e-05, 1e-05, 1e-05, 0.209708, 0.533729, 0.423194, 0.223249
), V4 = c(1e-05, 1e-05, 0.99997, 0.458868, 1e-05, 1e-05, 0.670058,
0.99997, 0.99997, 1e-05, 1e-05, 0.99997, 0.99997, 0.569778, 1e-05,
1e-05, 0.99997, 1e-05, 1e-05, 0.99997, 1e-05, 1e-05, 0.99997,
1e-05, 0.548472, 1e-05, 0.99997, 1e-05, 1e-05, 1e-05, 0.99997,
0.471833, 1e-05, 0.250753, 0.99997, 1e-05, 1e-05, 1e-05, 0.999969,
1e-05, 0.357055, 0.557769, 1e-05, 1e-05, 0.99997, 0.99997, 1e-05,
0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 0.81198, 1e-05, 0.751224, 1e-05, 0.99997,
0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.692311,
1e-05, 1e-05, 1e-05, 0.410101, 1e-05, 1e-05, 1e-05, 1e-05, 0.99997,
0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
0.466251, 1e-05, 1e-05)), .Names = c("V1", "V2", "V3", "V4"), class = "data.frame", row.names = c(NA,
-93L))
species = c("fuliginosa", "fuliginosa", "fuliginosa", "fuliginosa", "fuliginosa",
"fuliginosa", "fuliginosa", "fuliginosa", "fuliginosa", "fortis",
"fuliginosa", "fuliginosa", "fortis", "fortis", "fortis", "fuliginosa",
"fuliginosa", "fortis", "scandens", "fortis", "fortis", "scandens",
"scandens", "fuliginosa", "magnirostris", "scandens", "magnirostris",
"fortis", "fortis", "fortis", "fortis", "fortis", "scandens",
"fortis", "scandens", "scandens", "magnirostris", "fortis", "fortis",
"fortis", "scandens", "magnirostris", "magnirostris", "fortis",
"fortis", "fortis", "fortis", "magnirostris", "fortis", "magnirostris",
"magnirostris", "magnirostris", "fortis", "fortis", "fortis",
"magnirostris", "magnirostris", "fortis", "fortis", "fortis",
"fortis", "fortis", "fortis", "fortis", "fortis", "fortis", "fortis",
"magnirostris", "fortis", "fortis", "fortis", "fortis", "fortis",
"fortis", "fortis", "fortis", "fortis", "fortis", "fuliginosa",
"fortis", "fortis", "fortis", "fortis", "fuliginosa", "fuliginosa",
"fuliginosa", "fuliginosa", "fortis", "fortis", "fortis", "fortis",
"fortis", "fortis")