I was playing around with the ggmuller package earlier this evening, which, in addition to making me feel very inadequate in my evolutionary biology knowledge, inspired me to want to produce a plot depicting the evolution of metal subgenres. So here is a very short and simple tutorial on how to use this awesome package with very little knowledge of biology!
I created a quick dataset (or two) using band frequencies by genre from The Metal Archives. I also made a few basic (and probably controversial) assumptions about how metal subgenres evolved over time. While metal connoisseurs will debate at length about which subgenre came first and which begot which, the dataset captures the overall process of genre evolution and diversification.
install.packages("ggmuller")
library(ggmuller)
The ggmuller package requires two datasets: one for a phylogeny with parent and identity columns and the other for population changes over time. Using data from the MA, I created a quick parent and identity profile for each subgenre of metal starting with “heavy metal” (e.g. early bands like Black Sabbath, Led Zeppelin, etc.) and ending with “black metal”.
metal_parents <- data.frame(parent = c("Heavy Metal", "NWBHM", "NWBHM", "Thrash", "Thrash", "Death Metal", "Death Metal", "Thrash"),
identity = c("NWBHM", "Thrash", "Power Metal", "Death Metal", "Gore", "Technical Death Metal", "Melodic Death Metal", "Black Metal"))
head(metal_parents)
## parent identity
## 1 Heavy Metal NWBHM
## 2 NWBHM Thrash
## 3 NWBHM Power Metal
## 4 Thrash Death Metal
## 5 Thrash Gore
## 6 Death Metal Technical Death Metal
I then created another dataset for genre frequencies over 5 generations (i.e. decades) from 1968-2018.
population <- data.frame(Generation = rep(1:5, times = 1, each = 9),
Identity = rep(c("Heavy Metal", "NWBHM", "Thrash",
"Death Metal", "Power Metal",
"Gore", "Technical Death Metal",
"Melodic Death Metal", "Black Metal"), 5),
Population = c(316, 122, 15, 4, 26, 0, 0, 0, 4,
2857, 157, 3066, 1448, 940, 0, 23, 23, 283, 3197,
0, 4779, 9173, 1719, 59, 252, 1127, 5914, 5460,
0, 10230, 17437, 2715, 280, 601, 3900, 13308, 2262,
0, 3893, 7708, 879, 147, 372, 1477, 6924))
head(population)
## Generation Identity Population
## 1 1 Heavy Metal 316
## 2 1 NWBHM 122
## 3 1 Thrash 15
## 4 1 Death Metal 4
## 5 1 Power Metal 26
## 6 1 Gore 0
Finally, we need to merge the two datasets using the built-in `get_Muller_df`` function, and plot our evolution map.
metal_phylo <- get_Muller_df(metal_parents, population)
Muller_plot(metal_phylo, add_legend = TRUE, xlab = "Generation", ylab = "Frequency")
Even though my dataset is pretty small and only spans 50 years, the plot depicts the genealogical evolution of metal subgenres nicely. We can see how classic heavy metal slowly goes out of fashion, giving rise to more modern (and extreme) subgenres like death metal and black metal about 2.5 decades in (indeed, the proliferation of death and black metal happened after the mid-1990s). Those with richer datasets should have a lot fun with ggmuller.