ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Plotly.py 平行坐标图(Parallel Coordinates Plot)完整指南:从 px.parallel_coordinates 到 go.Parcoords

Plotly.py 平行坐标图(Parallel Coordinates Plot)完整指南:从 px.parallel_coordinates 到 go.Parcoords 数据可视化数据分析【免费下载链接】plotly.pyThe interactive graphing library for Python :sparkles:项目地址https://gitcode.com/gh_mirrors/pl/plotly.py点击查看免费下载平行坐标图Parallel Coordinates Plot是 Plotly.py 中可视化多维连续数据的经典图表类型数据表的每一行被绘制成一条折线polyline穿过一组相互平行的坐标轴每条轴对应一个维度。本篇指南以仓库文档 doc/python/parallel-coordinates-plot.md 为核心骨架结合 Plotly.py 的 Express 高层接口与go.Parcoords底层 trace 实现讲解如何用px.parallel_coordinates一行生成交互式平行坐标图、如何用dimensions精确控制参与绘制的列、如何通过constraintrange预设过滤区间、如何定制刻度文本ticktext/tickvals与颜色映射以及如何利用 5.10 新增的unselected属性控制未选中线条的颜色与透明度。读完本文你将能独立完成从原始 DataFrame 到可交互、可筛选、可导出的一整套多维数据平行坐标可视化方案。一、平行坐标图的基本原理与适用场景平行坐标图适合展示高维数据通常 4 个维度以上中多个连续变量之间的关系与分布模式。其核心编码方式是每个维度变量对应一条垂直轴轴上有该变量的数值范围range数据集中每一行样本用一条折线表示折线依次穿过各维轴上的对应数值点相邻维度之间线条的走向与聚集程度可以直观呈现变量之间的相关性、聚类结构或异常样本。正如文档所述对于多维数据的其他表示方式还可以参考 平行类别图parallel categories、雷达图 与 散点图矩阵SPLOM。其中平行类别图px.parallel_categories面向类别型维度而平行坐标图面向连续型维度两者在仓库 plotly/express/_chart_types.py 中紧邻定义底层分别构造go.Parcoords与go.Parcats。Plotly.py 的平行坐标图默认具备丰富的交互能力你可以沿任意轴拖拽线条进行区域过滤也可以直接拖动轴名称对变量顺序重新排列——这两个交互特性在文档的 Express 与 graph_objects 两个章节中都被明确强调。二、用 Plotly Express 快速创建平行坐标图2.1 第一个示例鸢尾花数据集Plotly Expresspx是 Plotly 的高层、易用接口。文档给出的第一个示例基于内置的鸢尾花iris数据集一行即可完成图表构建import plotly.express as px df px.data.iris() fig px.parallel_coordinates(df, colorspecies_id, labels{species_id: Species, sepal_width: Sepal Width, sepal_length: Sepal Length, petal_width: Petal Width, petal_length: Petal Length, }, color_continuous_scalepx.colors.diverging.Tealrose, color_continuous_midpoint2) fig.show()要点解析df px.data.iris()返回一个 pandas DataFrame共 150 行、5 列四个花器官度量 物种标签colorspecies_id将物种编号映射为折线颜色该列必须为数值型因为平行坐标图使用连续色标labels{...}重命名轴标签让图表更易读原始列名中的下划线会被替换为空格color_continuous_scalepx.colors.diverging.Tealrose使用 Plotly 内置的发散色标Tealrose对应仓库 plotly/colors/diverging.py 中定义的调色板color_continuous_midpoint2将色标的中间点锚定在数值 2 处使发散色标的颜色变化围绕该值对称展开。2.2 用 dimensions 参数选择参与绘制的列默认情况下px.parallel_coordinates会对 DataFrame 中的所有数值列绘制轴。当数据集中包含不需要展示的列时可用dimensions参数显式指定列的列表与顺序import plotly.express as px df px.data.iris() fig px.parallel_coordinates(df, colorspecies_id, dimensions[sepal_width, sepal_length, petal_width, petal_length], color_continuous_scalepx.colors.diverging.Tealrose, color_continuous_midpoint2) fig.show()这里只保留了四个花瓣/花萼度量列轴的显示顺序即dimensions列表中的顺序。2.3 Express 接口的底层实现从源码 plotly/express/_chart_types.py 可以看到parallel_coordinates的函数签名包含data_frame、dimensions、color、labels、color_continuous_scale、range_color、color_continuous_midpoint、title、subtitle、template、width、height其函数体只有一行return make_figure(argslocals(), constructorgo.Parcoords)也就是说px.parallel_coordinates本质上是对底层go.Parcoordstrace 的封装它负责把 DataFrame 的列抽取为dimensions数组、把color列映射为line.color、把连续色标与中点配置翻译为颜色映射最终生成一个go.Figure。这也是为什么 Express 与 graph_objects 两种写法最终生成的图表在交互与渲染层面完全一致。关于 Express 如何处理各类输入数据长表、宽表、pandas 对象等可进一步参考 plotly-express 的参数说明文档。三、用 go.Parcoords 构建底层图表对于需要更精细控制例如逐维度定制range、tickvals、constraintrange的场景可以直接使用 graph_objects 接口。go.Parcoordstrace 的完整可用属性定义在仓库 plotly/graph_objs/_parcoords.py 中包括dimensions、line、domain、labelfont、rangefont、tickfont、unselected、labelangle、labelside等dimensions的每一项是plotly.graph_objs.parcoords.Dimension对象其合法属性constraintrange、label、multiselect、name、range、tickformat、ticktext、tickvals、values、visible见 plotly/graph_objs/parcoords/_dimension.py。3.1 最小可运行的示例文档给出的第一个go.Parcoords示例直接以列表字面量传入四个维度非常适合快速验证交互行为import plotly.graph_objects as go fig go.Figure(data go.Parcoords( line_colorblue, dimensions list([ dict(range [1,5], constraintrange [1,2], # change this range by dragging the pink line label A, values [1,4]), dict(range [1.5,5], tickvals [1.5,3,4.5], label B, values [3,1.5]), dict(range [1,5], tickvals [1,2,4,5], label C, values [2,4], ticktext [text 1, text 2, text 3, text 4]), dict(range [1,5], label D, values [4,2]) ]) ) ) fig.show()各维度字段说明label该维度在图表顶部显示的轴标题values该维度对应的数据序列长度必须与所有维度一致与line.color长度相同range该轴的显示范围[最小值, 最大值]决定轴刻度与折线在该轴上的位置constraintrange预设的过滤区间[from, to]图表加载后只显示落在此区间的折线同时轴上的粉色滑块会被放置在该区间处见 plotly/graph_objs/parcoords/_dimension.py 中对constraintrange的定义必须满足fromValue toValuetickvals/ticktext分别指定刻度位置与刻度标签文本二者按位置一一对应。3.2 基于真实数据的基础示例文档第二个示例从网络 CSV 读取鸢尾花数据展示了如何将 DataFrame 的列直接作为values并用line属性配置颜色import plotly.graph_objects as go import pandas as pd df pd.read_csv(https://raw.githubusercontent.com/bcdunbar/datasets/master/iris.csv) fig go.Figure(data go.Parcoords( line dict(color df[species_id], colorscale [[0,purple],[0.5,lightseagreen],[1,gold]]), dimensions list([ dict(range [0,8], constraintrange [4,8], label Sepal Length, values df[sepal_length]), dict(range [0,8], label Sepal Width, values df[sepal_width]), dict(range [0,8], label Petal Length, values df[petal_length]), dict(range [0,8], label Petal Width, values df[petal_width]) ]) ) ) fig.update_layout( plot_bgcolor white, paper_bgcolor white ) fig.show()这里line属性其子属性定义在 plotly/graph_objs/parcoords/_line.py并附带一个 colorbar 子对象接受一个 dictcolor一条与所有values等长的数值序列决定每条折线的颜色取值colorscale一个[[数值位置, 颜色], ...]列表将color的数值映射到具体颜色这里[0, 0.5, 1]三个锚点分别对应紫色、浅海绿与金色实现三物种0/1/2的离散着色。此外还通过fig.update_layout(plot_bgcolorwhite, paper_bgcolorwhite)将绘图区与纸张背景设为白色以获得更干净的视觉效果。3.3 高级示例多维度、多类型的轴定制文档的Advanced Parallel Coordinates Plot示例读取一份工程机械数据集演示了大规模多维度下的典型配置import plotly.graph_objects as go import pandas as pd df pd.read_csv(https://raw.githubusercontent.com/bcdunbar/datasets/master/parcoords_data.csv) fig go.Figure(data go.Parcoords( line dict(color df[colorVal], colorscale Electric, showscale True, cmin -4000, cmax -100), dimensions list([ dict(range [32000,227900], constraintrange [100000,150000], label Block Height, values df[blockHeight]), dict(range [0,700000], label Block Width, values df[blockWidth]), dict(tickvals [0,0.5,1,2,3], ticktext [A,AB,B,Y,Z], label Cyclinder Material, values df[cycMaterial]), dict(range [-1,4], tickvals [0,1,2,3], label Block Material, values df[blockMaterial]), dict(range [134,3154], visible True, label Total Weight, values df[totalWeight]), dict(range [9,19984], label Assembly Penalty Wt, values df[assemblyPW]), dict(range [49000,568000], label Height st Width, values df[HstW])]) ) ) fig.show()值得注意的细节line.colorscale Electric直接使用 Plotly 内置命名色标如Electric配合showscaleTrue显示色条line.cmin -4000、line.cmax -100手动指定颜色映射的数值上下限从而稳定色条范围、避免因数据极值变化导致颜色分布漂移Cyclinder Material维度通过tickvalsticktext将原本数值化的材质编码0、0.5、1、2、3映射为可读标签A、AB、B、Y、Z——这是让数值编码的类别维度在平行坐标轴上可读的常用技巧visible True显式控制该维度轴是否显示默认即为 True。3.4 未选中线条的颜色与透明度New in 5.10交互过滤是平行坐标图的核心能力而过滤之后未选中线条的视觉反馈同样重要。自 Plotly.py 5.10 起可以通过unselected属性单独设置未选中线条的颜色与透明度import plotly.graph_objects as go fig go.Figure(data go.Parcoords( line_colorblue, dimensions list([ dict(range [1,5], constraintrange [1,2], # change this range by dragging the pink line label A, values [1,4]), dict(range [1.5,5], tickvals [1.5,3,4.5], label B, values [3,1.5]), dict(range [1,5], tickvals [1,2,4,5], label C, values [2,4], ticktext [text 1, text 2, text 3, text 4]), dict(range [1,5], label D, values [4,2]) ]), unselected dict(line dict(color green, opacity 0.5)) ) ) fig.show()unselected在 trace 层面对应 plotly/graph_objs/parcoords/_unselected.py其子对象unselected.line定义见 plotly/graph_objs/parcoords/unselected/_line.py仅含两个属性color未选中线条的基础颜色支持十六进制、rgb/rgba、hsl/hsla、hwb、lab/lch/oklab/oklch、CSS 命名颜色等全部 CSS 颜色格式opacity未选中线条的透明度0 到 1 之间。文档指出把opacity0可以完全隐藏未选中线条从而把注意力集中在被过滤出的数据上示例中则设置为lightgray颜色配合opacity0.5的柔和降调效果。该特性通过降低背景线条的视觉权重让用户在高维过滤分析时能清晰地区分关注区域与忽略区域。四、交互、过滤与常见定制技巧4.1 默认交互行为无论是 Express 还是 graph_objects 写法平行坐标图都默认具备以下交互能力轴内过滤拖动某条轴上的粉色滑块或直接在轴上拖拽可设置constraintrange区间仅保留穿过该区间的折线多轴可叠加过滤条件轴重排拖动轴顶部的名称标签可以改变各维度的左右顺序便于将高度相关的变量相邻排列悬停检查悬停任意折线可查看该样本在各维度上的取值。4.2 利用 constraintrange 实现程序化过滤constraintrange不仅是用户拖拽的结果也可以作为初始状态在代码中预设让图表一打开就只展示关注区间内的数据。其值可以是单个[from, to]区间若启用多选multiselect非禁用还可以传一个由多个[from, to]组成的嵌套列表实现多段区间过滤见 plotly/graph_objs/parcoords/_dimension.py 的字段定义。4.3 用 tickvals ticktext 处理类别型维度当维度本质上是类别如材质编号、实验分组但以数值存储时通过tickvals指定刻度所在的数值位置、ticktext指定对应的人类可读标签即可让轴刻度显示类别名而折线仍按数值绘制。两者长度必须一致且按位置一一对应。4.4 颜色映射的完整控制链go.Parcoords的line对象支持与go.Scatter类似的连续颜色映射控制line.color数值序列或单一颜色line.colorscale内置命名色标如Electric或自定义[[位置, 颜色], ...]列表line.showscale是否显示色条line.cmin/line.cmax颜色映射的数值上下限line.colorbar色条本身的标题、刻度、长度等细节配置见 plotly/graph_objs/parcoords/line/_colorbar.py。此外go.Parcoords还支持通过labelfont、rangefont、tickfont分别定制轴标签、数值范围字体与刻度字体以及通过labelangle、labelside控制轴标签的角度与位置plotly/graph_objs/_parcoords.py 中均有对应属性定义。五、总结平行坐标图是 Plotly.py 中处理高维连续数据的高效可视化工具提供了一图总览 交互过滤的完整分析闭环。本文覆盖的两条使用路径各有侧重px.parallel_coordinates定义于 plotly/express/_chart_types.py适合从 DataFrame 快速出图用dimensions选列、color着色、labels重命名、color_continuous_scale与color_continuous_midpoint控制色标go.Parcoordstrace 定义于 plotly/graph_objs/_parcoords.py适合需要逐维度精细定制的场景可控制range、constraintrange、tickvals/ticktext、line颜色映射与unselected未选中样式。所有示例均默认带交互拖拽过滤、拖轴重排可直接在 Jupyter Notebook、脚本或任何支持 Plotly 渲染的环境中运行。更多属性细节可查阅文档 doc/python/parallel-coordinates-plot.md 及parcoordstrace 的完整属性参考。赞分享数据可视化数据分析【免费下载链接】plotly.pyThe interactive graphing library for Python :sparkles:项目地址https://gitcode.com/gh_mirrors/pl/plotly.py点击查看免费下载相关推荐探索数据的维度平行坐标图Parallel Coordinates探索数据的维度平行坐标图Parallel Coordinates 平行坐标图是一种强大的可视化工具它能以一种创新的方式展示多维数据使复杂的数据集变得易前端UI库/组件数据分析Apache Superset 平行坐标图插件实现解析legacy-plugin-chart-parallel-coordinatesApache Superset 平行坐标图插件实现解析legacy plugin chart parallel coordinates Apache Supe数据可视化数据分析后端Plotly.py 地毯等高线图Carpet Contour Plot完全指南从 Carpet 坐标系到 Contourcarpet 多轨迹叠加Plotly.py 地毯等高线图Carpet Contour Plot完全指南从 Carpet 坐标系到 Contourcarpet 多轨迹叠加 本文基于数据可视化数据分析上一篇VirtualApp批量操作进度显示显示操作进度条下一篇Awesome-Dify-Workflow输入输出变量配置技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表