(完整版) Mfuzz 这样画,秒变别人用不起的样子

西瓜站长 生信益站 2024-05-10 08:00
图片

生信益站,一点就有益祝友友们天天开心,月月发 CNS~


图片
设我为🌟星标,每天就能第一时间看到推送啦~

Mfuzz 包自带的绘图功能特性有限,今天继续给大家画图(完整版)——Mfuzz 聚类+表达热图+通路注释散点图

样图如下:图片

我画的如下(还行吧~):

图片

数据提取

这里用到的 2 个数据集mfuzz_clustermfuzz_class均来自这篇推文《代码分享| 使用Mfuzz聚类并进行基因表达趋势(时间序列)分析》:

library(tidyverse)

clusterindex <- mfuzz_cluster$cluster

# data frame with Membership values
memship <- mfuzz_cluster$membership
colnames(memship) <- paste("membership",
    seq_along(memship[1,]),
    sep = (""))

exp <- exprs(mfuzz_class)

exp <- data.frame(exp ,
        Identifier = rownames(mfuzz_class),
        clusterindex, memship)

exp <- exp %>%
    gather(sample,
        expression ,
        - Identifier,
        - clusterindex,
        - contains("membership")) %>%
    mutate(Time = gsub("(\\w*\\D+(?=([0-9]+)))|((?<=\\d)\\D+$)",
                "",
                sample,
                perl = TRUE)) %>%
        # ABC__00 -> 00
        mutate(Time = gsub("^\\D*$"# need changed
                "0",
                Time,
                perl = TRUE)) %>%
        mutate(Time = as.numeric(Time))

exp[["maxMembership"]] <- exp %>%
    select(contains("membership")) %>%
    apply(., 1, max)

exp$clusterindex <- factor(exp$clusterindex, levels=  as.character(1:10))
图片

基本图形

library(ggplot2)

g <- ggplot(data = exp,
            aes(x = Time, y = expression)) +
    geom_line(
        aes(group = Identifier,
            colour = maxMembership
        ),
        size = 0.5
    ) +
    scale_colour_gradientn("Membership",
        colours = rev(hcl.colors(4"RdYlGn")),
        limits = c(01),
        breaks = c(0.10.30.50.70.9))
图片

聚类折线图

让每个 cluster 的折线图,垂直方向排列展示。

centers <- mfuzz_cluster$centers %>%
    data.frame(.,
               clusterindex = rownames(.)) %>%
    gather(sample,
           Centre,
           - clusterindex) %>%
    mutate(Time = gsub("(\\w*\\D+(?=([0-9]+)))|((?<=\\d)\\D+$)",
                       "",
                       sample,
                       perl = TRUE)) %>%
    # ABC__00 -> 00
    mutate(Time = gsub("^\\D*$",
                       "0",
                       Time,
                       perl = TRUE)) %>%
    mutate(Time = as.numeric(Time))

centers$clusterindex <- factor(centers$clusterindex, levels=as.character(1:10))
图片

使用分面:

g + geom_line(data = centers, aes(x = Time, y = Centre),color = "grey30") +
    scale_x_continuous(expand = c(00))  +
    facet_grid(clusterindex ~ .,switch = "y") +
    theme_bw() +
    theme(legend.position = "top",
          axis.title = element_blank(),
          axis.ticks = element_blank(),
          axis.text.y = element_blank(),
          axis.text.x = element_text(hjust = 1),
          strip.background = element_blank(),
          strip.text.y.left = element_text(angle = 0),
          panel.grid = element_blank(),
          plot.margin = margin(10,0,0,10,"pt")) +

    guides(colour = guide_colourbar(title.position = "top", title.hjust = 0.5)) -> p1

p1
图片

表达热图

即每个 cluster 的基因表达热图:

exp %>%
    ggplot(aes(x = Time, y = Identifier, fill = expression)) +
    geom_tile(color = NA) +
    scale_fill_gradientn("Expression",
        colours = rev(hcl.colors(10"RdBu")),
        limits = c(-1.51.5),
        breaks = c(-1.5, -0.7500.751.5)) +
     scale_x_continuous(expand = c(00))  +
     facet_grid(clusterindex ~ .,scales = "free"
     ) +
     theme_bw() +
     theme(legend.position = "top",
           axis.title = element_blank(),
           axis.ticks = element_blank(),
           axis.text.y = element_blank(),
           strip.text = element_blank(),
           strip.background = element_blank(),
           panel.grid = element_blank(),
           plot.margin = margin(10,0,0,0,"pt")) +
     guides(fill = guide_colourbar(title.position = "top", title.hjust = 0.5)) -> p2

p2
图片

通路注释散点图

需要对每个 cluster 的基因进行富集,然后整理成如下格式——我这里用的GO富集结果,然后每个 cluster 只展示BP/CC/MFtop2,即每个 cluster 只画6个点

图片

效果如下:

图片

1元 = 10微信豆

可试读71%

1元 = 10微信豆
绘图专题 · 目录
上一篇Mfuzz聚类这样画,秒变别人用不起的样子下一篇富集到的GO太多太繁怎么办?
个人观点,仅供参考

微信扫一扫
关注该公众号