首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >create_dendrogram在plotly.figure_factory中的设置

create_dendrogram在plotly.figure_factory中的设置
EN

Stack Overflow用户
提问于 2022-04-21 17:55:24
回答 1查看 158关注 0票数 0

我在用create_dendrogramplotly.figure_factory中绘制树状图时遇到了一些困难。

默认的链接乐趣(linkagefun)是complete,而距离函数(distfun)的默认设置是scs.distance.pdist

但是我想要的设置是jaccard表示distfunaverage表示linkagefun:我想要的设置如下:

代码语言:javascript
复制
import pandas as pd
import numpy as np
from scipy.spatial.distance import pdist
import matplotlib.pyplot as plt
import scipy.cluster.hierarchy as such

plt.figure(figsize = (10, 10))
disMat = sch.distance.pdist(df, metric='jaccard')
disMat1 = sch.distance.squareform(disMat)
Z=sch.linkage(disMat1,method='average')
Dend=sch.dendrogram(Z,orientation='right')
plt.tick_params(
        axis='y',          
        which='both',      
        direction='in',   
        left=False,      
        right=False,         
        labelleft=False)

我注意到linkagefun可以由linkagefun=lambda x: sch.linkage(x, 'average')设置,但是distfun不能由distfun='jaccard'设置,我不知道如何设置这个函数。

代码语言:javascript
复制
fig = create_dendrogram(df, orientation='left',
                        labels=df.index,
                         distfun='jaccard',
                         linkagefun=lambda x: sch.linkage(x, 'average'))
fig.show()

下面是df集的示例:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'1-7':[0,0,1,1,0,1,1],'1-2':[1,0,1,0,0,1,1],'2-3':[1,0,0,0,1,1,0],'2-2':[0,1,0,1,0,1,1],'1-1':[1,0,0,1,0,1,0],'1-3':[0,1,1,1,0,0,0],'1-5':[0,1,0,1,1,0,1]},index=['a','b','c','d','e','f','g'])

因为我需要Dash来绘制网页上的图形,所以我似乎不得不巧妙地使用create_dendrogram

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-30 20:30:56

您可以使用partialfunctools“冻结”指定距离度量的scipy.spatial.distance.pdist参数。

代码语言:javascript
复制
    from functools import partial
    from scipy.spatial.distance import pdist
    pw_jaccard_func = partial(pdist, metric='jaccard')

然后使用部分函数作为distfun的输入。

代码语言:javascript
复制
fig = create_dendrogram(df, orientation='left',
                        labels=df.index,
                        distfun=pw_jaccard_func ,
                        linkagefun=lambda x: sch.linkage(x, 'average'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71958887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档