
数据可视化数据分析【免费下载链接】plotly.pyThe interactive graphing library for Python :sparkles:项目地址https://gitcode.com/gh_mirrors/pl/plotly.py点击查看免费下载本篇技术指南围绕当前仓库 plotly.py 配套的生物信息学可视化文档 bio-clustergram.md 展开系统讲解 Dash BioClustergram组件的核心用法它如何以二维浮点数组为输入在组件内部完成缺失值填充imputation与层次聚类最终渲染出热图 行/列树状图组合图。读完本文你将掌握默认 Clustergram 的构建、树状图簇颜色与线宽定制、行列树状图相对尺寸控制以及如何将其嵌入 Dash 应用同时通过阅读本仓库figure_factory模块中create_dendrogram的源码实现plotly/figure_factory/_dendrogram.py理解树状图在 plotly.py 底层是如何基于 SciPy 聚类结果生成可交互 trace 的。Clustergram 是什么Clustergram 是热图heatmap 树状图dendrogram的组合图在基因表达gene expression数据领域最为常见。图中行、列两侧的树状图表达了层次聚类hierarchical clustering的结果聚类结构可以帮助研究者识别表达水平相关的基因分组距离越近的样本或基因在树状图上合并得越早在热图中也往往呈现相近的颜色模式。按照 bio-clustergram.md 的说明dash_bio.Clustergram是一个基于 Python 的组件其底层使用 plotly.py 生成图形。它的核心特点包括输入一个二维浮点型 numpy 数组或等价的 pandas DataFrame内置预处理缺失数据填充imputation与层次聚类计算都在组件内部完成使用者无需预先调用 SciPy聚类可视化达到或超过用户设定相似度阈值的簇在对应树状图中以单条 trace 呈现并可通过注解annotation突出显示可定制性用户可指定额外参数自定义计算聚类的度量与方法例如观测值之间的两两距离pairwise distance以及链接矩阵linkage matrix的计算方式。环境准备与依赖运行本文示例需要以下依赖pip install dash dash-bio pandas plotly其中dash_bio依赖的底层绘图能力即来自本仓库 plotly.py而层次聚类计算依赖scipy。从 plotly/figure_factory/_dendrogram.py 可以看到figure factory 通过optional_imports.get_module按需引入numpy、scipy、scipy.cluster.hierarchysch与scipy.spatialscs并在缺少 scipy 时抛出明确的ImportError提示需要安装 scipy 及其空间/层次聚类子模块。因此若你在只用 plotly.py 核心功能时这些科学计算依赖不会被强制加载但一旦使用树状图相关功能就必须确保 scipy 可用。默认 Clustergram先看最基础、开箱即用的用法。示例使用一份脑癌染色体基因表达数据集CSV 格式来自 Plotly 官方示例数据集直接传给dash_bio.Clustergramimport pandas as pd import dash_bio df pd.read_csv(clustergram_brain_cancer.csv) # 原文档示例使用 Plotly 官方数据集仓库中的该文件可下载到本地后替换为本地路径 dash_bio.Clustergram( datadf, column_labelslist(df.columns.values), row_labelslist(df.index), height800, width700 )各参数含义如下参数类型作用datapandas DataFrame / 二维 numpy 数组基因表达数据矩阵行通常对应样本或基因列对应基因或观测column_labelslist列标签热图顶部/底部树状图对应的标签示例中取自 DataFrame 的列名row_labelslist行标签热图左侧/右侧树状图对应的标签示例中取自 DataFrame 的索引heightint图形总高度像素示例为 800widthint图形总宽度像素示例为 700组件会基于这份二维数据自动完成缺失值填充 → 两两距离计算 → 层次聚类 → 热图与双侧树状图的联合渲染。定制树状图簇颜色与线宽dash_bio.Clustergram允许修改代表聚类簇的树状图 trace 颜色并配置其线宽import pandas as pd import dash_bio df pd.read_csv(clustergram_brain_cancer.csv) dash_bio.Clustergram( datadf, column_labelslist(df.columns.values), row_labelslist(df.index), height800, width700, color_list{ row: [#636EFA, #00CC96, #19D3F3], col: [#AB63FA, #EF553B], bg: #506784 }, line_width2 )参数说明color_list字典用于分别定制行树状图row、列树状图col的簇颜色以及背景色bg。row与col的值是颜色字符串列表组件会按聚类合并顺序依次取色因此列表长度应覆盖期望区分的簇数量。line_width树状图线条宽度示例设为 2。这一簇级染色的设计与 plotly.py 底层树状图实现一脉相承。查看 plotly/figure_factory/_dendrogram.py 中的get_color_dictSciPy 的scipy.cluster.hierarchy.dendrogram默认用r/g/b/c/m/y/k/w之类的单字符颜色标识每个聚类分支plotly.py 会将其映射为更美观的 RGB 配色默认映射为rgb(0,116,217)蓝、rgb(35,205,205)青、rgb(61,153,112)绿等 8 色从 scipy 1.5.0 起颜色命名改为C0~C9循环格式该函数也通过new_old_color_map将新旧命名统一映射保证不同 scipy 版本下配色一致。而line_width对应的线宽最终作用在每条树状图scattertrace 的modelines线条上。控制树状图相对尺寸display_ratio参数用于控制行树状图与列树状图相对热图的比例import pandas as pd import dash_bio df pd.read_csv(clustergram_brain_cancer.csv) dash_bio.Clustergram( datadf, column_labelslist(df.columns.values), row_labelslist(df.index), height800, width700, display_ratio[0.1, 0.7] )display_ratio长度为 2 的列表分别控制行树状图的相对高度与列树状图的相对宽度相对热图尺寸的比例。示例中[0.1, 0.7]表示行树状图高度约为热图高度的 0.1 倍、列树状图宽度约为热图宽度的 0.7 倍。调整该比例可以让热图占据更大的可视区域或将树状图放大以便观察聚类细节适合在样本/基因数量较多时按需权衡。将 Clustergram 嵌入 Dash 应用由于dash_bio.Clustergram本身就是一个 Dash 组件它可以像其他 Dash Bio 组件一样直接放进 Dash 应用的layout中。原文档以隐藏代码块的形式展示了一个在线交互示例在 Dash 官方示例站点中以 IFrame 呈现的完整可交互应用核心思路可概括为import dash from dash import html import dash_bio app dash.Dash(__name__) app.layout html.Div( dash_bio.Clustergram( datadf, column_labelslist(df.columns.values), row_labelslist(df.index), height800, width700 ) ) if __name__ __main__: app.run_server(debugTrue)将Clustergram作为 Dash 组件使用后即可借助 Dash 的回调callback机制实现交互式数据筛选、动态更新聚类结果等场景这也是原文档将该页面归类于 Dash Bio 文档体系的原因。底层原理plotly.py 中的树状图 figure factory虽然Clustergram组件属于dash_bio包但其绘图能力建立在 plotly.py 的 figure factory 之上。本仓库提供了对应的底层函数plotly.figure_factory.create_dendrogram位于 plotly/figure_factory/_dendrogram.py在 plotly/figure_factory/init.py 中导出并在 doc/python/dendrogram.md 中有专门教程。它本质上是 SciPyscipy.cluster.hierarchy.dendrogram的薄封装。核心调用链如下源码 plotly/figure_factory/_dendrogram.pyd distfun(X) # 1. 计算两两距离矩阵默认 scipy.spatial.distance.pdist Z linkagefun(d) # 2. 由距离矩阵计算链接矩阵默认 scipy.cluster.hierarchy.linkagemethodcomplete P sch.dendrogram( Z, orientationself.orientation, labelsself.labels, no_plotTrue, color_thresholdcolor_threshold, ) # 3. 生成树状图坐标与簇颜色随后 get_dendrogram_traces 将P[icoord]每个∩形树杈的 4 个 X 点与P[dcoord]4 个 Y 点逐条转换为typescatter、modelines的 trace每个聚类分支一条并按簇颜色着色最后通过graph_objs.Figure组装成完整图形。create_dendrogram的完整参数也是理解 Clustergram 聚类定制选项的底层依据参数默认值作用X必填观测矩阵二维 ndarray行数应不小于 2orientationbottom树状图方向top、right、bottom、left分别决定热图四周树状图的摆放labelsNone叶节点观测标签列表colorscale8 色默认调色板树状图簇颜色列表需要 8 种颜色第 7 种被忽略scipy1.5.0 时第 2、3、6 种会使用两次列表不足时缺失值以默认色补齐超出则忽略distfunscs.distance.pdist由观测计算两两距离的函数对应文档所述pairwise distance between observationslinkagefunsch.linkage(x, complete)由两两距离计算链接矩阵的函数对应文档所述linkage matrix默认使用 complete最大距离链接hovertextNone各树状图簇 trace 的悬停文本color_thresholdNone簇分离阈值达到或超过该相似度的分支作为独立簇着色对应文档所述user-defined threshold of similarity从方向处理的实现看plotly/figure_factory/_dendrogram.pyleft/bottom方向下 X 坐标取正、top/right下取负从而在画布上正确摆放四个方向的树状图这与测试 tests/test_optional/test_figure_factory/test_figure_factory.py 中对四种方向的断言一致如left方向tickvals 0、right方向tickvals 0。该文件中的TestDendrogram测试类还覆盖了默认树状图输出、随机矩阵、自定义colorscale灰度配色、叶节点ticktext/tickvals等场景可作为理解行为边界的参考。进一步阅读树状图的独立教程doc/python/dendrogram.md包含create_dendrogram与热图结合的完整示例figure factory 总览doc/python/figure-factories.md底层实现plotly/figure_factory/_dendrogram.py测试用例tests/test_optional/test_figure_factory/test_figure_factory.py其他 figure factory表、向量场、三角剖分等plotly/figure_factory/init.py需要说明的是dash_bio.Clustergram组件本体属于独立的 dash-bio 项目本文聚焦其在 plotly.py 生态中的角色、典型用法及其底层的树状图实现原理如果你需要自行组装热图 双侧树状图可以直接组合create_dendrogram上下/左右各一个与go.Heatmap具体做法见 doc/python/dendrogram.md 中带热图的树状图一节。赞分享数据可视化数据分析【免费下载链接】plotly.pyThe interactive graphing library for Python :sparkles:项目地址https://gitcode.com/gh_mirrors/pl/plotly.py点击查看免费下载相关推荐读懂计算机视觉学术谱系的4条主线读懂计算机视觉学术谱系的4条主线 这份计算机视觉开源资源仓库里最特别的不是资源清单而是一份学术谱系。 people.md https://link.gitc教程计算机视觉Mermaid.js树状图层级数据结构的可视化表达Mermaid.js树状图层级数据结构的可视化表达 在数据可视化领域层级关系的清晰呈现一直是信息传递的关键挑战。Mermaid.js作为一款强大的文本驱动型图表库前端数据可视化如何快速集成gbert-large-sts-openmind API德语语义相似度分析的完整指南 如何快速集成gbert large sts openmind API德语语义相似度分析的完整指南 gbert large sts openmind 是一创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考