Author

Hu Zheng

Published

2024-12-01

Code
library(Seurat)
library(tidyverse)
library(monocle)
library(SCopeLoomR)
library(ggraph)
library(SummarizedExperiment)
source('bin/Palettes.R')
Code
seu.harmony <- readRDS('../data/seu.harmony.rds')
seu.harmony.metadata <- readRDS('../data/seu.harmony.metadata.rds')
seu.harmony@meta.data <- seu.harmony.metadata
seu.IT <- subset(seu.harmony, cells=colnames(seu.harmony)[which(
  seu.harmony$SubType %in% names(col_SubType)[1:8]
)])
cds <- readRDS("../data/Figure3/cds.rds")

3.1 Figure_3A

Code
seu <- seu.IT
seu$Pseudotime <- cds$Pseudotime
seu$SubType <- factor(seu$SubType, levels = names(col_SubType))
seu$orig.ident <- factor(seu$orig.ident, levels = c("P1","P4","P10","Adult"))
Figure_3A <- 
  FeaturePlot(seu, features = "Pseudotime", split.by = 'orig.ident', ncol = 4) &
  scale_color_gradientn(colours = sciRcolor::pal_scircolor(96)) &
  theme(axis.line = element_blank(), axis.ticks = element_blank(), 
        axis.text = element_blank(), plot.title = element_text(size = 30)) &
  labs(x='', y='', title = "") &
  coord_fixed()
Figure_3A

Code
ggsave("../../Figure/Figure4/Figure_3A.pdf", plot = Figure_3A,
       height = 6, width = 18, units = "in")

3.2 Figure_3B

Code
Figure_3B <- 
  plot_cell_trajectory(cds, color_by = "Pseudotime") +
  scale_color_gradientn(colours = sciRcolor::pal_scircolor(96))
Figure_3B

Code
ggsave("../../Figure/Figure3/Figure_3B.pdf", plot = Figure_3B,
       height = 4, width = 5, units = "in")

3.3 Figure_3C

Code
cds$orig.ident <- factor(
  cds$SubType, 
  levels = c("Im L2/3 IT","Im L4/5 IT","Im L5 IT","Im L6 IT",
             "L2/3 IT","L4/5 IT","L5 IT","L6 IT"))
Figure_3C <- 
  plot_cell_trajectory(cds, color_by = "SubType") +
  scale_color_manual(values = col_SubType) +
  facet_wrap(~SubType_v4, nrow=2) +
  theme_void()
Figure_3C

Code
ggsave("../../Figure/Figure3/Figure_3C.pdf", plot = Figure_3C,
       height = 4, width = 12, units = "in")

3.4 Figure_3D

Code
ordergene <- cds@featureData@data$gene_short_name[cds@featureData@data$use_for_ordering==TRUE]
#BEAM_res <- BEAM(cds[ordergene,], branch_point = 1, cores = 2)
#BEAM_res <- BEAM_res[order(BEAM_res$qval),]
#write.csv(BEAM_res, "../../data/rds/Figure3/BEAM_res_all.csv")
BEAM_res <- read.csv("../data/Figure3/BEAM_res_all.csv", row.names = 1)
BEAM_res <- BEAM_res[order(BEAM_res$qval),]
sig_gene_names <- row.names(subset(BEAM_res, qval < 1e-10))
BEAM_res <- BEAM_res[sig_gene_names,]

Figure_3D <- plot_pseudotime_heatmap(
  cds[sig_gene_names[1:1000],],
  num_clusters = 5,
  cores = 4,
  show_rownames = F,
  hmcols = colorRampPalette(rev(sciRcolor::pal_scircolor(85)))(100),
  return_heatmap = T)

#Go Gene
#clusters <- data.frame(cutree(Figure_3D$tree_row, k=5))
#clusters[,1] <- as.character(clusters[,1])
#colnames(clusters) <- "Gene_clusters"
#write.csv(clusters, "../../data/rds/Figure3/Time_cluster_all.csv")
Code
knitr::include_graphics("./images/Figure_3D.png", dpi = 300)

3.5 Figure_3E

Code
loom <- open_loom('../data/Figure3/SCENIC/aucell.loom')
regulons_incidMat <- SCopeLoomR::get_regulons(loom, column.attr.name="Regulons")
regulonAUC <- assay(SCopeLoomR::get_regulons_AUC(loom,column.attr.name='RegulonsAUC'))
Warning: package 'AUCell' was built under R version 4.2.2
Code
seu <- seu.IT
regulonsToPlot <- c(
  'Cux1(+)','Sox11(+)','Sox12(+)','Myc(+)','Myf6(+)','Atf4(+)','Tbr1(+)',
  'Nr1d1(+)','Bhlhe41(+)','Hes1(+)','Erg(+)','Rxrg(+)','Jun(+)')
regulonsToPlot_mat <- scale(t(regulonAUC[regulonsToPlot,]))
seu@meta.data <- cbind(seu@meta.data, regulonsToPlot_mat)
seu$Time_subtype <- factor(seu$SubType, levels = names(col_SubType)[1:8])

Figure_3E <- 
  DotPlot(
  seu,
  features = regulonsToPlot,
  group.by = 'SubType',
  col.min=0, col.max=2, dot.scale = 5) +
  coord_flip() +
  scale_x_discrete(limits=rev) +
  scale_color_gradientn(colours = c("lightblue3", "lightblue", "white", "red", "red4")) +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 25, hjust = 1)) +
  geom_hline(yintercept = c(4.5), linetype="dashed") +
  labs(x="",y="")
Figure_3E

Code
ggsave("../../Figure/Figure3/Figure_3E.pdf", plot = Figure_3E, 
       height = 3, width = 6.5, units = "in")

3.6 Figure_3F

Code
grn <- read_tsv("../data/Figure3/SCENIC/grn.tsv")
selected_tf <- c("Sox11","Sox12","Atf4","Tbr1")[1]

sub_grn <- grn %>%
  filter(TF == selected_tf) %>%
  group_by(TF) %>%
  top_n(20, importance) %>%
  ungroup()

nodes <- data.frame(
  node = unique(c(sub_grn$TF, sub_grn$target))
)
nodes$node.size <- ifelse(nodes$node %in% selected_tf, 10, 10)
nodes$node.colour <- ifelse(nodes$node %in% selected_tf, "#6468c5", "#e56967")

edges <- data.frame(
  from = sub_grn$TF,
  to = sub_grn$target,
  edge.width = sub_grn$importance,
  edge.colour = sub_grn$importance
)

graph_data <- tidygraph::tbl_graph(nodes = nodes, edges = edges, directed = TRUE)

# 绘制网络图
ggraph(graph_data, layout = "stress", circular = TRUE) +
  geom_edge_arc(aes(edge_colour = edge.colour, edge_width = edge.width)) +
  geom_node_point(aes(colour = node.colour, size = node.size)) +
  geom_node_label(aes(label = node), size = 5, repel = TRUE) +
  theme_void() +
  #scale_color_manual(values = c("#6468c5", "#e56967")) +
  scale_edge_color_gradientn(colors = rev(sciRcolor::pal_scircolor(85))) +
  scale_edge_width_continuous(range = c(0.2, 3)) +
  scale_size_continuous(guide = "none") +  # 移除 node.size 的图例[^36^]
  theme(
    legend.position = "right",
    legend.title = element_text(size = 10),
    legend.text = element_text(size = 8)
  ) +
  labs(edge_width = "Importance", edge_colour = "Importance")

Code
ggsave('../../Figure/Figure3/Figure_3F/Sox11_netplot.pdf',width = 6, height = 5)

3.7 Figure_3G-J

Code
data <- as.data.frame(regulonsToPlot_mat)
data$UMAP_1 <- as.numeric(seu.IT@reductions$umap@cell.embeddings[,"UMAP_1"])
data$UMAP_2 <- as.numeric(seu.IT@reductions$umap@cell.embeddings[,"UMAP_2"])
data$Time <- seu.IT$orig.ident
data$SubType <- seu.IT$SubType
data$Pseudotime <- cds$Pseudotime

gene <- "Sox11(+)"
df <- data.frame(
  UMAP_1 = data$UMAP_1,
  UMAP_2 = data$UMAP_2,
  value = data[,gene]
)
df$value[df$value>3] <- 3
df$value[df$value<0] <- 0
df <- df[order(df$value),]
df <- df[df$UMAP_1<0 & df$UMAP_1 > -12 & df$UMAP_2<8,]

Figure_3G <- 
  ggplot(df, mapping=aes(x=UMAP_1, y=UMAP_2, color=value)) +
  geom_point() +
  theme_void() +
  theme(legend.position = "none") +
  coord_fixed() +
  scale_color_gradientn(colours = c("lightblue3", "lightblue", "white", "red", "red4"), limits = c(0,3))
Figure_3G

Code
ggsave("../../Figure/Figure3/Figure_3G/Sox11(+)_UMAP.png", plot = Figure_3F, 
       height = 6, width = 6, units = "in")