Created a script to generate nice visuals for slides
This commit is contained in:
parent
aa97a8f486
commit
47fe4de889
1 changed files with 82 additions and 0 deletions
82
generate-figures.R
Normal file
82
generate-figures.R
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
source("utils.R")
|
||||
library(stringr)
|
||||
|
||||
if (!file.exists("data/hmc-phyloseq-europe.Rds")) {
|
||||
source("load-europe.R")
|
||||
} else {
|
||||
cpd_phyloseq_europe <- readRDS("data/hmc-phyloseq-europe.Rds")
|
||||
}
|
||||
|
||||
df <- otu_table(cpd_phyloseq_europe)
|
||||
colnames(df) <- paste0("$S_{", seq(1, ncol(df)), "}$")
|
||||
|
||||
|
||||
nr <- 6
|
||||
nc <- 6
|
||||
|
||||
sub_df <- ellipse_table(df, nr = nr, nc = nc)
|
||||
|
||||
taxo_df <-
|
||||
rownames(sub_df)[-(ceiling(nr / 2) + 1)] |>
|
||||
str_replace_all(" ", "") |>
|
||||
strsplit("\\.") |>
|
||||
do.call(what = "rbind") |>
|
||||
as.data.frame()
|
||||
|
||||
colnames(taxo_df) <- c("Kingdom", "Phylum", "Class", "Order", "Family", "Genus")
|
||||
|
||||
rownames(sub_df) <- c(taxo_df[seq(1, ceiling((nr / 2))), "Genus"], rownames(sub_df)[(ceiling(nr / 2) + 1)], taxo_df[seq(ceiling((nr / 2)) + 1, nrow(taxo_df)), "Genus"])
|
||||
|
||||
|
||||
kable(sub_df, format = "latex", escape = FALSE, align = "c") |>
|
||||
writeLines(con = file.path("outfiles", "otu-tabular.tex"))
|
||||
|
||||
library(data.tree)
|
||||
library(ape)
|
||||
library(ggtree)
|
||||
library(ggplot2)
|
||||
library(dplyr)
|
||||
# Create a path string column from your hierarchy
|
||||
levels_vec <- c("Kingdom", "Phylum", "Class", "Order", "Family", "Genus")
|
||||
taxo_df$pathString <- apply(
|
||||
taxo_df[, levels_vec],
|
||||
1,
|
||||
function(x) paste(x, collapse = "/")
|
||||
)
|
||||
|
||||
# Now build the tree
|
||||
taxo_tree <- as.Node(taxo_df)
|
||||
|
||||
taxo_phylo <- as.phylo(taxo_tree)
|
||||
|
||||
# 3. Extract node data
|
||||
p <- ggtree(taxo_phylo, layout = "rectangular")
|
||||
node_data <- p$data
|
||||
|
||||
# 4. Build lookup table: each label → its rank
|
||||
lookup <- taxo_df %>%
|
||||
tidyr::pivot_longer(cols = all_of(levels_vec), names_to = "rank_name", values_to = "label")
|
||||
|
||||
# 5. Join node data with taxonomy ranks
|
||||
node_data2 <- node_data %>%
|
||||
left_join(lookup, by = "label") %>%
|
||||
mutate(rank_name = factor(rank_name, levels = levels_vec)) # enforce order
|
||||
|
||||
internal_nodes <- node_data2
|
||||
|
||||
library(ggokabeito)
|
||||
# 6. Plot with colored nodes
|
||||
(phylo_plot <- ggtree(taxo_phylo, layout = "slanted") %<+% node_data2 +
|
||||
geom_point(aes(color = rank_name), size = 3, na.rm = TRUE) +
|
||||
geom_text2(aes(label = label, color = rank_name),
|
||||
hjust = 1.1, vjust = -1, size = 4, na.rm = TRUE
|
||||
) +
|
||||
scale_colour_okabe_ito(name = "Taxonomic Rank", order = c(1:3, 5:7)) +
|
||||
theme_void() +
|
||||
theme(legend.position = "none"))
|
||||
library(tikzDevice)
|
||||
# Set up tikzDevice to use standalone document class
|
||||
options(tikzDocumentDeclaration = "\\documentclass[10pt]{standalone}")
|
||||
tikz(file = file.path("outfiles", "otu-phylo.tex"), height = 9, , width = 15, standAlone = TRUE)
|
||||
phylo_plot
|
||||
dev.off()
|
||||
Loading…
Add table
Reference in a new issue