From bf8c4210c380647b7d9fbc4681f8afe0ceb701a7 Mon Sep 17 00:00:00 2001 From: sdgamboa Date: Tue, 14 Nov 2023 16:38:27 -0500 Subject: [PATCH] add large files and update scrip[t --- misc/half_propagation/createStats.R | 66 ++++++++++++++++++++++++- misc/half_propagation/habitat.tsv | 3 ++ misc/half_propagation/no_habitat.tsv | 3 ++ misc/half_propagation/percent_plot.png | Bin 135393 -> 134466 bytes 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 misc/half_propagation/habitat.tsv create mode 100644 misc/half_propagation/no_habitat.tsv diff --git a/misc/half_propagation/createStats.R b/misc/half_propagation/createStats.R index f8df113..fd76699 100644 --- a/misc/half_propagation/createStats.R +++ b/misc/half_propagation/createStats.R @@ -4,6 +4,8 @@ library(purrr) library(tidyr) library(ggplot2) library(ggpubr) +library(ggtree) +library(data.tree) ltp <- ltp() tip_data <- ltp$tip_data @@ -69,7 +71,7 @@ p_data <- map(p_l, ~ { # habitat ----------------------------------------------------------------- h <- read.table( - file = 'misc/half_propagation/bugphyzz_export_2023-11-08.tsv', + file = 'misc/half_propagation/habitat.tsv', header = TRUE, sep = '\t' ) |> filter(!is.na(Attribute_group) & !is.na(Attribute)) |> @@ -136,3 +138,65 @@ ggsave( filename = 'misc/half_propagation/percent_plot.png', plot = p1, width = 10, height = 9, dpi = 150, bg = 'white' ) + + +tree <- ltp$tree +node_data <- ltp$node_data +tip_data <- ltp$tip_data +data('tree_list') +ncbi_tree <- as.Node(tree_list) +ncbi_nodes <- ncbi_tree$Get( + attribute = 'name', + filterFun = function(node) node$name != 'ArcBac', + simplify = TRUE +) |> + unname() + +ranks_var <- c('strain', 'species', 'genus', 'family', 'order', 'class', 'phylum', 'kingdom') +ranks_ncbi <- count(data.frame(r = sub('__\\d+$', '', ncbi_nodes)), r, name = 'NCBI') |> + mutate( + Rank = case_when( + r == 'c' ~ 'class', + r == 'f' ~ 'family', + r == 'g' ~ 'genus', + r == 'k' ~ 'kingdom', + r == 'o' ~ 'order', + r == 'p' ~ 'phylum', + r == 's' ~ 'species', + r == 't' ~ 'strain' + ) + ) |> + mutate(Rank = factor(Rank, levels = ranks_var)) |> + arrange(Rank) |> + select(-r) + + +ranks <- bind_rows(select(node_data, Rank), select(tip_data, Rank)) +rownames(ranks) <- NULL +ranks_ltp <- ranks |> + mutate(Rank = ifelse(Rank == 'superkingdom', 'kingdom', Rank)) |> + filter(Rank %in% ranks_var) |> + mutate(Rank = factor(Rank, levels = ranks_var)) |> + count(Rank, name = 'LTP') |> + arrange(Rank) + +rank_data <- full_join(ranks_ltp, ranks_ncbi, by = 'Rank') +rank_data_long <- rank_data |> + pivot_longer( + names_to = 'tree', values_to = 'n', cols = c(LTP, NCBI) + ) + +rank_data_long |> + ggplot(aes(Rank, n)) + + geom_col(aes(fill = tree), position = 'dodge') + + facet_wrap(.~Rank, scales = 'free', ncol = 2) + + # scale_y_continuous(breaks = function(x) seq(floor(min(x)), ceiling(max(x)), by = 1)) + + labs( + y = 'Number of taxids' + ) + + theme_bw() + + theme( + axis.text.x = element_blank(), + axis.ticks.x = element_blank(), + axis.title.x = element_blank() + ) diff --git a/misc/half_propagation/habitat.tsv b/misc/half_propagation/habitat.tsv new file mode 100644 index 0000000..c70a694 --- /dev/null +++ b/misc/half_propagation/habitat.tsv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de9801e1af16fad2236abf03ec405c727062e6e3e821c8096e1a8a8744277290 +size 91831021 diff --git a/misc/half_propagation/no_habitat.tsv b/misc/half_propagation/no_habitat.tsv new file mode 100644 index 0000000..0025a22 --- /dev/null +++ b/misc/half_propagation/no_habitat.tsv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9250d28e09243970456de0ea41f7a2a243cb9dc097b70ec670cec830a937ccc +size 599703491 diff --git a/misc/half_propagation/percent_plot.png b/misc/half_propagation/percent_plot.png index c648724855e8948d86f2203a8aa3c38a9e85775e..2ca6b5169941e461df1adc48d453ef2d41f3002b 100644 GIT binary patch delta 12500 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 I*ZbrD0gTSvApigX delta 13434 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 Jxl*?t{6A#iV*LOB