利用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函数,但是这个函数无法绘制中间线,就得自己添加了。