genomewalker
4/2/2020 - 8:41 PM

Tree for Yucheng

Tree for Yucheng

library(tidyverse)
library(ggtree)
library(ape)
library(readxl)
library(viridis)

# Get tree data
tree_data <- read_xlsx(path = "clade_table_with_region.xlsx") %>%
  rename(label = ID) %>%
  mutate(group = case_when(age >= 50000 ~ "50+",
                           (age < 50000 & age >= 26500) ~ "Pre-LGM",
                           (age < 26500 & age >= 19000) ~ "LGM",
                           (age < 19000 & age >= 11600) ~ "Late-Glacial",
                           (age < 11600 & age >= 8200) ~ "Early-Holocene",
                           (age < 8200 & age >= 6000) ~ "Mid-Holocene",
                           (age < 6000 & age > 0) ~ "Late-Holocene",
                           TRUE ~ "Unknown")
  )

# Read tree and massage
tree <- read.tree(file = "final_tree_with_supports.nwk")
tree$tip.label <- gsub("\\{\\d+\\}", "", tree$tip.label)

# Massage tree data
data <- tree_data %>% 
  select(label, type, region, group) %>%
  mutate(present = 1) %>%
  complete(label, type, group, fill = list(present = 0)) %>%
  mutate(region = ifelse(region == "NA", NA, region))


# Create function to get data for heatmaps
get_data_gheatmap <- function(X){
  data %>%
    filter(group == X) %>% 
    mutate(region = ifelse(present == 0 , NA, region)) %>% 
    select(label, type, region) %>%
    distinct() %>% 
    pivot_wider(names_from = type, values_from = region) %>%
    as.data.frame() %>% 
    column_to_rownames("label")
} 

# Define groups
groups <- c("Unknown", "Late-Holocene", "Mid-Holocene", "Early-Holocene", "Late-Glacial", "LGM", "Pre-LGM", "50+")

# Get data for heatmaps
data_gheatmap <- map(groups, get_data_gheatmap)
names(data_gheatmap) <- groups

# Plot base tree
p <- ggtree(tree, layout = "fan", open.angle = 50) %<+% (data %>% filter(present == 1)) +
   geom_tiplab(size = 0,
                align = TRUE,
                linesize = 0.2,
                linetype = "dotted",
                color = "black") +
  theme(legend.position = "top",
        legend.key = element_blank()) # no keys

# Get some colors and names for color vector
colors <- c("#31688EFF", "#FDE725FF", "#35B779FF", "#440154FF")

names(colors) <- data %>% 
  select(region) %>%
  filter(!is.na(region)) %>% 
  distinct() %>% 
  deframe() 

# Plot heatmaps in the tree
offset <-  0.0012
p1 <- NULL

# Initial heatmap (Unknown)
p1 <- gheatmap(p, data_gheatmap$Unknown, width=.1, offset= 0, color = "black") + 
  theme(legend.position = "none") +
  scale_fill_manual(values = colors, na.value = grey.colors(8)[1], alpha = 0.6)

for (i in 2:length(data_gheatmap)) {
  p1 <- gheatmap(p1, data_gheatmap[[i]], width=.1, offset = offset, color = "black") + 
    theme(legend.position = "top") +
    
    scale_fill_manual(values = colors)
  offset <- offset + 0.001
}

# Rotate tree
p1 <- rotate_tree(p1, angle = 89)

# Save tree
ggsave(p1, filename = "tree.pdf", width = 8, height = 8)