HubGeneNetworkPlot.Rd
Construct a unified network plot comprising hub genes for multiple modules.
HubGeneNetworkPlot(
seurat_obj,
mods = "all",
n_hubs = 6,
n_other = 3,
sample_edges = TRUE,
edge_prop = 0.5,
return_graph = FALSE,
edge.alpha = 0.25,
vertex.label.cex = 0.5,
hub.vertex.size = 4,
other.vertex.size = 1,
wgcna_name = NULL,
...
)
A Seurat object
Names of the modules to plot. If mods = "all", all modules are plotted.
The number of hub genes to plot for each module.
The number of non-hub genes to sample from each module
The proportion of edges in the graph to sample.
logical determining whether we return the graph (TRUE) or plot the graph (FALSE)
Scaling factor for the edge opacity
The font size of the gene labels
The size of the hub gene nodes
The size of the other gene nodes
The name of the hdWGCNA experiment in the seurat_obj@misc slot
HubGeneNetworkPlot
#> function (seurat_obj, mods = "all", n_hubs = 6, n_other = 3,
#> sample_edges = TRUE, edge_prop = 0.5, return_graph = FALSE,
#> edge.alpha = 0.25, vertex.label.cex = 0.5, hub.vertex.size = 4,
#> other.vertex.size = 1, wgcna_name = NULL, ...)
#> {
#> if (is.null(wgcna_name)) {
#> wgcna_name <- seurat_obj@misc$active_wgcna
#> }
#> MEs <- GetMEs(seurat_obj, wgcna_name)
#> modules <- GetModules(seurat_obj, wgcna_name)
#> if (all("all" %in% mods)) {
#> mods <- levels(modules$module)
#> mods <- mods[mods != "grey"]
#> }
#> else {
#> if (!all(mods %in% unique(as.character(modules$module)))) {
#> stop(paste0("Some selected modules are not found in wgcna_name: ",
#> wgcna_name))
#> }
#> modules <- modules %>% subset(module %in% mods)
#> }
#> TOM <- GetTOM(seurat_obj, wgcna_name)
#> hub_list <- lapply(mods, function(cur_mod) {
#> cur <- subset(modules, module == cur_mod)
#> cur[, c("gene_name", paste0("kME_", cur_mod))] %>% top_n(n_hubs) %>%
#> .$gene_name
#> })
#> names(hub_list) <- mods
#> other_genes <- modules %>% subset(!(gene_name %in% unlist(hub_list))) %>%
#> group_by(module) %>% sample_n(n_other, replace = TRUE) %>%
#> .$gene_name %>% unique
#> selected_genes <- c(unlist(hub_list), other_genes)
#> selected_modules <- modules %>% subset(gene_name %in% selected_genes)
#> subset_TOM <- TOM[selected_genes, selected_genes]
#> selected_modules$geneset <- ifelse(selected_modules$gene_name %in%
#> other_genes, "other", "hub")
#> selected_modules$size <- ifelse(selected_modules$geneset ==
#> "hub", hub.vertex.size, other.vertex.size)
#> selected_modules$label <- ifelse(selected_modules$geneset ==
#> "hub", as.character(selected_modules$gene_name), "")
#> selected_modules$fontcolor <- ifelse(selected_modules$color ==
#> "black", "gray50", "black")
#> edge_cutoff <- min(sapply(1:nrow(subset_TOM), function(i) {
#> max(subset_TOM[i, ])
#> }))
#> edge_df <- reshape2::melt(subset_TOM) %>% subset(value >=
#> edge_cutoff)
#> edge_df$color <- future.apply::future_sapply(1:nrow(edge_df),
#> function(i) {
#> gene1 = as.character(edge_df[i, "Var1"])
#> gene2 = as.character(edge_df[i, "Var2"])
#> col1 <- modules %>% subset(gene_name == gene1) %>%
#> .$color
#> col2 <- modules %>% subset(gene_name == gene2) %>%
#> .$color
#> if (col1 == col2) {
#> col = col1
#> }
#> else {
#> col = "grey90"
#> }
#> col
#> })
#> groups <- unique(edge_df$color)
#> print(groups)
#> if (sample_edges) {
#> temp <- do.call(rbind, lapply(groups, function(cur_group) {
#> cur_df <- edge_df %>% subset(color == cur_group)
#> n_edges <- nrow(cur_df)
#> cur_sample <- sample(1:n_edges, round(n_edges * edge_prop))
#> cur_df[cur_sample, ]
#> }))
#> }
#> else {
#> temp <- do.call(rbind, lapply(groups, function(cur_group) {
#> cur_df <- edge_df %>% subset(color == cur_group)
#> n_edges <- nrow(cur_df)
#> cur_df %>% dplyr::top_n(round(n_edges * edge_prop),
#> wt = value)
#> }))
#> }
#> edge_df <- temp
#> edge_df <- edge_df %>% group_by(color) %>% mutate(value = scale01(value))
#> edge_df$color <- sapply(1:nrow(edge_df), function(i) {
#> a = edge_df$value[i]
#> alpha(edge_df$color[i], alpha = a)
#> })
#> g <- igraph::graph_from_data_frame(edge_df, directed = FALSE,
#> vertices = selected_modules)
#> l <- igraph::layout_with_fr(g, ...)
#> if (return_graph) {
#> return(g)
#> }
#> plot(g, layout = l, edge.color = adjustcolor(igraph::E(g)$color,
#> alpha.f = edge.alpha), vertex.size = igraph::V(g)$size,
#> edge.curved = 0, edge.width = 0.5, vertex.color = igraph::V(g)$color,
#> vertex.frame.color = igraph::V(g)$color, vertex.label = igraph::V(g)$label,
#> vertex.label.family = "Helvetica", vertex.label.font = 3,
#> vertex.label.color = igraph::V(g)$fontcolor, vertex.label.cex = vertex.label.cex,
#> ...)
#> }
#> <bytecode: 0x7f77ce712938>
#> <environment: namespace:hdWGCNA>