Mfuzz包K-means做趋势图

利用Mfuzz做趋势图已经是很多人做过的教程了,但是也存在一个坑,特别是后面的可视化,这里给大家排排坑。

setwd("/home/liuxw/TY/Data/Cluster")
library(Mfuzz)
library(RColorBrewer)
#这些包都可以用BiocManager很轻松的安装上
# 读取数据
fpkm <- read.table('deg.fpkm', header = TRUE)
fpkm <- as.matrix(fpkm)
deg.fpkm

创建 ExpressionSet 对象并进行预处理

mfuzz_class <- new("ExpressionSet", exprs = fpkm)
mfuzz_class <- filter.NA(mfuzz_class, thres = 0.25)
mfuzz_class <- fill.NA(mfuzz_class, mode = 'mean')
mfuzz_class <- filter.std(mfuzz_class, min.std = 0)
mfuzz_class <- standardise(mfuzz_class)

聚类分析

set.seed(1234)
cluster_num <- 6
mfuzz_cluster <- mfuzz(mfuzz_class, c = cluster_num, m = mestimate(mfuzz_class))

可视化

pdf("mfuzz_plot.pdf", width = 15, height = 8)
color.2 <- colorRampPalette(rev(c("#DADADB")))(1000) # 使用单一颜色值
time_labels <- c("V", "P", "F", "S")
mfuzz.plot(mfuzz_class, 
            cl = mfuzz_cluster, 
            mfrow = c(2, 3), new.window = FALSE, colo= color.2,time.labels = time_labels)


# 计算每个聚类的中心
centers <- aggregate(exprs(mfuzz_class), by = list(mfuzz_cluster$cluster), FUN = mean) #这个值就是中心线的值

# 添加中心线
colors <- rainbow(cluster_num) #可以让中间线有不同颜色

for (i in 1:cluster_num) {
  cluster_center <- as.numeric(centers[centers$Group.1 == i, -1])
  lines(1:length(cluster_center), cluster_center, col = colors[i], lwd = 2)
}
dev.off()
结果图.png

不知道为什么 mfuzz.plot2这个函数作图,只要加了colo这个函数(设置线条颜色)就报错,所以想要设置颜色,只能曲线救国,使用mfuzz.plot函数,但是这个函数无法绘制中间线,就得自己添加了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容