标签: dendrogram

如何在scipy/matplotlib中绘制和注释层次聚类树形图

我使用的是dendrogramscipy使用绘制层次聚类matplotlib如下:

mat = array([[1, 0.5, 0.9],
             [0.5, 1, -0.5],
             [0.9, -0.5, 1]])
plt.subplot(1,2,1)
plt.title("mat")
dist_mat = mat
linkage_matrix = linkage(dist_mat,
                         "single")
print "linkage2:"
print linkage(1-dist_mat, "single")
dendrogram(linkage_matrix,
           color_threshold=1,
           labels=["a", "b", "c"],
           show_leaf_counts=True)
plt.subplot(1,2,2)
plt.title("1 - mat")
dist_mat = 1 - mat
linkage_matrix = linkage(dist_mat,
                         "single")
dendrogram(linkage_matrix,
           color_threshold=1,
           labels=["a", "b", "c"],
           show_leaf_counts=True)
Run Code Online (Sandbox Code Playgroud)

我的问题是:第一,为什么mat1-mat在这里给同一聚类?第二,如何使用树的每个分支来注释距离,dendrogram以便可以比较节点对之间的距离?

最后似乎show_leaf_counts忽略了标志,有没有办法打开它,以便显示每个类中的对象数量?谢谢.在此输入图像描述

python numpy matplotlib dendrogram scipy

41
推荐指数
2
解决办法
4万
查看次数

使用sklearn.AgglomerativeClustering绘制树状图

我正在尝试使用children_提供的属性构建树形图AgglomerativeClustering,但到目前为止我运气不好.我无法使用,scipy.cluster因为提供的凝聚聚类scipy缺少一些对我很重要的选项(例如指定聚类数量的选项).我真的很感激那里的任何建议.

    import sklearn.cluster
    clstr = cluster.AgglomerativeClustering(n_clusters=2)
    clusterer.children_
Run Code Online (Sandbox Code Playgroud)

python plot cluster-analysis dendrogram

40
推荐指数
3
解决办法
2万
查看次数

scipy连接格式

我已经编写了自己的聚类程序,并希望生成一个树形图.最简单的方法是使用scipy树形图函数.但是,这要求输入的格式与scipy linkage函数产生的格式相同.我找不到如何格式化输出的示例.我想知道是否有人可以启发我.

python dendrogram scipy

34
推荐指数
3
解决办法
2万
查看次数

我怎样才能制作出这样的情节?

我遇到过这种情节,它在给定的一组时间序列数据上执行分层聚类.谁能告诉我如何绘制这样的情节?

我对RJavascript中的实现持开放态度,特别是使用d3.js.

在此输入图像描述

javascript r dendrogram ggplot2 d3.js

31
推荐指数
1
解决办法
4065
查看次数

sklearn凝聚聚类连锁矩阵

我正试图画一个完整的链接scipy.cluster.hierarchy.dendrogram,我发现它scipy.cluster.hierarchy.linkage比慢sklearn.AgglomerativeClustering.

但是,sklearn.AgglomerativeClustering不返回簇之间的距离和原始观测的数量,这是scipy.cluster.hierarchy.dendrogram需要的.有办法接受它们吗?

python cluster-analysis dendrogram scikit-learn

28
推荐指数
4
解决办法
2万
查看次数

如何用大数据集绘制树形图?

我在R中使用ape(分析系统发育和进化)包,它具有树状图绘制功能.我使用以下命令以Newick格式读取数据,并使用绘图函数绘制树形图:

__CODE__

__CODE__

__CODE__

由于数据集非常大,因此无法在树的较低层中看到任何细节.我只看到黑色区域,但没有细节.我只能从顶部看到几个级别,然后没有细节.

我想知道绘图功能是否有任何缩放功能.我尝试使用xLim和yLim来限制区域,但是,它们只是限制了区域,并且不进行缩放以使细节可见.缩放或在不缩放的情况下使细节可见将解决我的问题.

我也很高兴知道任何其他包,功能或工具,可以帮助我克服这个问题.

谢谢.

plot r zoom dendrogram

25
推荐指数
2
解决办法
2万
查看次数

加入树状图和热图

我有heatmap(来自一组样本的基因表达):

set.seed(10)
mat <- matrix(rnorm(24*10,mean=1,sd=2),nrow=24,ncol=10,dimnames=list(paste("g",1:24,sep=""),paste("sample",1:10,sep="")))
dend <- as.dendrogram(hclust(dist(mat)))
row.ord <- order.dendrogram(dend)
mat <- matrix(mat[row.ord,],nrow=24,ncol=10,dimnames=list(rownames(mat)[row.ord],colnames(mat)))
mat.df <- reshape2::melt(mat,value.name="expr",varnames=c("gene","sample"))

require(ggplot2)
map1.plot <- ggplot(mat.df,aes(x=sample,y=gene))+geom_tile(aes(fill=expr))+scale_fill_gradient2("expr",high="darkred",low="darkblue")+scale_y_discrete(position="right")+
  theme_bw()+theme(plot.margin=unit(c(1,1,1,-1),"cm"),legend.key=element_blank(),legend.position="right",axis.text.y=element_blank(),axis.ticks.y=element_blank(),panel.border=element_blank(),strip.background=element_blank(),axis.text.x=element_text(angle=45,hjust=1,vjust=1),legend.text=element_text(size=5),legend.title=element_text(size=8),legend.key.size=unit(0.4,"cm"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

(由于plot.margin我正在使用的论据,左侧被切断,但我需要这个,如下所示).

然后,我prunedendrogram根据深度截止值来获得较少的集群(即,只有深深的分裂),并做一些编辑所产生dendrogram有它绘制他们的方式,我希望它:

depth.cutoff <- 11
dend <- cut(dend,h=depth.cutoff)$upper
require(dendextend)
gg.dend <- as.ggdend(dend)
leaf.heights <- dplyr::filter(gg.dend$nodes,!is.na(leaf))$height
leaf.seqments.idx <- which(gg.dend$segments$yend %in% leaf.heights)
gg.dend$segments$yend[leaf.seqments.idx] <- max(gg.dend$segments$yend[leaf.seqments.idx])
gg.dend$segments$col[leaf.seqments.idx] <- "black"
gg.dend$labels$label <- 1:nrow(gg.dend$labels)
gg.dend$labels$y <- max(gg.dend$segments$yend[leaf.seqments.idx])
gg.dend$labels$x <- gg.dend$segments$x[leaf.seqments.idx]
gg.dend$labels$col <- "black"
dend1.plot <- ggplot(gg.dend,labels=F)+scale_y_reverse()+coord_flip()+theme(plot.margin=unit(c(1,-3,1,1),"cm"))+annotate("text",size=5,hjust=0,x=gg.dend$label$x,y=gg.dend$label$y,label=gg.dend$label$label,colour=gg.dend$label$col)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 我用cowplot's将它们绘制在一起plot_grid:

require(cowplot)
plot_grid(dend1.plot,map1.plot,align='h',rel_widths=c(0.5,1)) …
Run Code Online (Sandbox Code Playgroud)

r dendrogram heatmap ggplot2 cowplot

24
推荐指数
1
解决办法
2300
查看次数

你如何比较两个树形图之间的"相似性"(在R中)?

我有两个树形图,我希望相互比较,以找出它们是如何"相似".但我不知道有任何方法可以这样做(更不用说实现它的代码了,比方说,在R中).

任何线索?

更新(2014-09-13):

自从提出这个问题以来,我编写了一个名为dendextend的R包,用于树形图的可视化,操作和比较.此软件包在CRAN上,附带详细的插图.它包括诸如cor_cophenetic,cor_bakers_gammaBk/ Bk_plot.以及tanglegram用于在视觉上比较两棵树的功能.

statistics tree r dendrogram dendextend

21
推荐指数
2
解决办法
1万
查看次数

树,集群,径向树和径向集群布局之间的平滑过渡

对于项目,我需要以交互方式更改可视化的分层数据布局 - 无需任何基础数据的任何更改.能够在它们之间切换的布局应该是树,簇,径向树和径向簇.转换应该最好是动画.

我认为这将是相对容易的任务D3.我开始了,但是我在翻译和轮换,数据绑定等方面迷失了,所以我向你寻求帮助.此外,我可能正在做的不是D3的精神,这是不好的,因为我正在寻求一个干净的解决方案.

我把一个jsfidle放在一起,但它只是一个起点,增加了单选按钮,方便的小数据集和初始集群布局 - 只是为了帮助任何想看看它的人.提前致谢!

更新:

我只想专注于链接,所以我暂时禁用其他元素.在@AmeliaBR方法的基础上,获得以下动画:

在此输入图像描述

这是更新的jsfiddle.

更新2:

现在用圈子:(原谅我选择的颜色)

{末日毒霸-末日}

在此输入图像描述

这是一个更新的jsfiddle.

hierarchy dendrogram hierarchical-data d3.js

20
推荐指数
2
解决办法
8579
查看次数

如何在matplotlib中调整树形图的分支长度(如在astrodendro中)?[蟒蛇]

这是我在下面得到的图,但我希望它看起来像截断的树状图,astrodendro如下所示:

在此输入图像描述

还有一个从一个非常酷的树状图看本文,我想在重新创建matplotlib.

在此输入图像描述

下面是生成iris带有噪声变量的数据集并绘制树形图的代码matplotlib.

有谁知道如何:(1)截断分支,如示例图中; 和/或(2)使用astrodendro自定义链接矩阵和标签?

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import astrodendro
from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.spatial import distance

def iris_data(noise=None, palette="hls", desat=1):
    # Iris dataset
    X = pd.DataFrame(load_iris().data,
                     index = [*map(lambda x:f"iris_{x}", range(150))],
                     columns = [*map(lambda x: x.split(" (cm)")[0].replace(" ","_"), load_iris().feature_names)])

    y = pd.Series(load_iris().target,
                           index = X.index,
                           name = "Species")
    c = map_colors(y, mode=1, palette=palette, desat=desat)#y.map(lambda …
Run Code Online (Sandbox Code Playgroud)

python plot hierarchical-clustering matplotlib dendrogram

20
推荐指数
1
解决办法
514
查看次数