r - R 中热图上按簇对变量进行分组

标签 r graph cluster-analysis heatmap

我正在尝试重现 this paper on graph clustering 的第一个数字:enter image description here

这是我的邻接矩阵的示例:

data=cbind(c(48,0,0,0,0,1,3,0,1,0),c(0,75,0,0,3,2,1,0,0,1),c(0,0,34,1,16,0,3,0,1,1),c(0,0,1,58,0,1,3,1,0,0),c(0,3,16,0,181,6,6,0,2,2),c(1,2,0,1,6,56,2,1,0,1),c(3,1,3,3,6,2,129,0,0,1),c(0,0,0,1,0,1,0,13,0,1),c(1,0,1,0,2,0,0,0,70,0),c(0,1,1,0,2,1,1,1,0,85))
colnames(data)=letters[1:nrow(data)]
rownames(data)=colnames(data)

通过这些命令,我​​获得了以下热图:

library(reshape)
library(ggplot2)
data.m=melt(data)
data.m[,"rescale"]=round(rescale(data.m[,"value"]),3)
p=ggplot(data.m,aes(X1, X2))+geom_tile(aes(fill=rescale),colour="white") 
p=p+scale_fill_gradient(low="white",high="black")
p+theme(text=element_text(size=10),axis.text.x=element_text(angle=90,vjust=0)) 

enter image description here

这与上面图 1 左侧的图非常相似。唯一的区别是(1)节点不是随机排序的,而是按字母顺序排序的,(2)我使用的不是只有二进制黑/白像素,而是使用“灰色阴影”调色板来显示节点的强度节点之间的共现。

但关键是很难区分任何集群结构(对于 100 个节点的完整集合来说更是如此)。所以,我想在热图上按簇对顶点进行排序。我从社区检测算法中得到了这个成员向量:

membership=c(1,2,4,2,5,3,1,2,2,3)

现在,如何获得类似于上图 1 右侧图的热图?

提前非常感谢您的帮助

PS:我已经实验过R draw kmeans clustering with heatmapR: How do I display clustered matrix heatmap (similar color patterns are grouped)但无法得到我想要的。

最佳答案

事实证明这非常简单。我仍在发布解决方案,以便其他与我有同样情况的人不会像我一样浪费时间。

第一部分与之前完全相同:

data.m=melt(data)
data.m[,"rescale"]=round(rescale(data.m[,"value"]),3)

现在,技巧是融化的 data.frame 的因子级别必须按成员资格排序:

data.m[,"X1"]=factor(data.m[,"X1"],levels=levels(data.m[,"X1"])[order(membership)])
data.m[,"X2"]=factor(data.m[,"X2"],levels=levels(data.m[,"X2"])[order(membership)])

然后,绘制热图(与之前相同):

p=ggplot(data.m,aes(X1, X2))+geom_tile(aes(fill=rescale),colour="white") 
p=p+scale_fill_gradient(low="white",high="black")
p+theme(text=element_text(size=10),axis.text.x=element_text(angle=90,vjust=0))

enter image description here

这一次,簇清晰可见。

关于r - R 中热图上按簇对变量进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29085940/

相关文章:

r - 如何遍历参数来分析

r - (1-previous_record)*current_record 的累积积

javascript - 带有百分比坐标的响应轴

使用深度优先搜索计算邻接矩阵表示的不同图数的 C 程序

python - python中的经纬度聚类

Javascript Worker 丢失属性

r - 是否可以在变异函数图中添加线条/文本/小刻度线/个性化轴?

c++ - spoj 底部的强连接组件

c++ - 在 C++ 中对 Kinect 生成的点进行分组

r - 将 public 添加到 .gitignore 后,Netlify 无法部署站点