我有兴趣使用heatmap.2
可视化我的结果变量的分布,如gplots
包中提供的那样。
这就是我的数据集的样子:
> head(data.w)
year Armenia Azerbaijan Bulgaria Croatia Cyprus Czech Republic Estonia Georgia
1998 0 0 1.14 0 1.21 1.32 1.43 0
1999 0 0 1.32 0 1.44 1.50 1.68 0
2000 0 0 1.32 0 1.63 1.59 1.75 0
2001 0.75 0 1.46 0 1.85 1.93 1.81 0
2002 0.82 0 1.74 0 2.04 2.00 2.00 0.34
2003 0.87 0 1.85 0 2.22 2.22 2.19 0.42
要绘制热图,我使用以下代码:
library(gplots)
library(grDevices)
min(data.w[,2:9])
max(data.w[,2:9])
data.wx <-as.matrix(data.w)
pdf("heatmap.pdf", width=10,height=5)
heatmap.2(as.matrix(t(data.w[,2:9])), trace="none",
Rowv=NULL, Colv=NULL, dendrogram="none",
labCol=data.w$year,labRow=data.w$cname,
lhei=c(0.1,1), lwid=c(0.1,1), margins=c(5,10),
colsep=1:16, rowsep=1:9, sepcolor="white",
col=gray.colors(8, start=1, end=0) )
dev.off()
总的来说,我对情节看起来很满意:
然而,显示的国家实际上属于两个不同的群体,亚美尼亚,阿塞拜疆和格鲁吉亚属于该群体&#34;邻居&#34;其余国家是该组织的成员&#34;扩大&#34;。
简而言之,我想按群组成员分割热图。在每个群组中,国家/地区不应按字母顺序或按值列出,但我需要根据具体情况对订单进行个性化标准。
重要的是,我不想
RowSideColors
对行变量进行分组
附加参数,例如为了建议here
对输入变量进行分类。为了获得这样的热图,我需要添加到图中的哪个热图,其中行的顺序是个性化的? 请注意,不需要在分隔组的行之间留出额外空间。
万分感谢!
答案 0 :(得分:0)
虽然不理想,但在上述情况下,我认为您可以通过移除Rowv=NULL,
但保留Colv=NULL, dendrogram="none",
来对其进行排序,但禁止绘制树形图。
只有头脑中的数据我得到了heatmap 使用此代码:
data.w = t(matrix(c(1998, 0, 0, 1.14, 0, 1.21, 1.32, 1.43, 0, 1999, 0, 0, 1.32, 0, 1.44, 1.50, 1.68, 0, 2000, 0, 0, 1.32, 0, 1.63, 1.59, 1.75, 0, 2001, 0, 0, 1.46, 0, 1.85, 1.93, 1.81, 0, 2002, 0, 0, 1.74, 0, 2.04, 2.00, 2.00, 0, 2003, 0, 0, 1.85, 0, 2.22, 2.22, 2.19, 0),9,6))
colnames(data.w) = c("year", "Armenia", "Azerbaijan", "Bulgaria", "Croatia", "Cyprus", "Czech Republic", "Estonia", "Georgia")
group = c(0,0,1,1,1,1,1,1,0)
library(gplots)
heatmap.2(as.matrix(t(data.w[,2:9])), trace="none",
# Rowv=NULL, Colv=NULL,
dendrogram="none",
# reorderfun = group,
labCol=data.w[,1],#labRow=data.w$cname,
lhei=c(0.1,1), lwid=c(0.1,1), margins=c(5,10),
colsep=1:16, rowsep=1:9, sepcolor="white",
col=gray.colors(8, start=1, end=0) )
当你在其余的几年中加入时,克罗地亚将与其他三年分开。
否则应该可以使用reorderfun
选项进行,但我不知道它是如何工作的。
答案 1 :(得分:0)
Sebastian Raschka [http://sebastianraschka.com]非常友善,帮助我解决了我的问题,我很乐意分享。
如果您想避免行(此处为国家/地区的名称)按字母顺序排序,则应编写一个函数,根据需要对DataFrame中的国家/地区进行排序。为了简单起见并坚持使用示例,您还可以在少数几个国家/地区快速手动执行此操作:
data.w <- data.w[c("Cyprus","Czech Republic","Estonia","Bulgaria","Croatia","Armenia","Azerbaijan","Georgia")]
然后我们使用占位符函数覆盖heatmap.2函数reorderfun
,然而,这不会赢得&#34;做&#34;做&#34;任何事情,以便我们保持DataFrame的顺序。
总的来说,这就是代码应该如何生成如上图所示的热图(第2张图片)。
heatmap.2(as.matrix(t(data.w)), trace="none",
Rowv=NULL, Colv=NULL, dendrogram="none",
reorderfun=function(d,w) { d },
labCol=data.w$year,labRow=data.w$cname,
lhei=c(0.1,3), lwid=c(0.1,3), margins=c(5,8),
colsep=1:16, rowsep=1:22, sepcolor="white",
col=gray.colors(8, start=1, end=0)
)
非常感谢塞巴斯蒂安!