本文介绍如何使用 plotly 实现「混合型平行坐标图」:前若干轴表示分类变量(如字符串或离散标签),后若干轴表示连续数值变量,通过编码映射与布局定制达成语义清晰、视觉统一的可视化效果。
本文介绍如何使用 plotly 实现「混合型平行坐标图」:前若干轴表示分类变量(如字符串或离散标签),后若干轴表示连续数值变量,通过编码映射与布局定制达成语义清晰、视觉统一的可视化效果。
Plotly 原生的 px.parallel_coordinates 仅接受数值型维度,而 px.parallel_categories 则将所有列(包括数值列)强制视为离散类别——这导致无法直接呈现“分类轴 + 数值轴”共存的混合平行坐标图。但借助类别编码(categorical encoding)+ 标签重映射(ticktext customization),我们可优雅地绕过该限制,构建兼具语义可读性与统计表达力的混合视图。
核心思路
- 对分类列进行数值编码:使用 .astype('category').cat.codes 将字符串类别(如 'a', 'b')映射为整数索引(如 0, 1),保留原始顺序;
- 保留原始列名作为轴标签:通过 labels 参数指定显示名称,避免图中出现 A_cat 等技术字段;
- 自定义 X 轴刻度文本:利用 fig.update_layout(xaxis=dict(ticktext=...)) 显式设置每条轴的标题,确保用户看到的是 'A', 'B', 'X', 'Y',而非位置索引;
- (可选)用颜色编码关键数值维度:例如以 X 列着色,并配置发散色阶增强区分度。
完整实现示例
import pandas as pd
import plotly.express as px
# 构造示例数据
df = pd.DataFrame({
'A': ['a', 'a', 'b', 'b'],
'B': ['1', '2', '1', '2'],
'X': [5.3, 6.7, 3.1, 0.8],
'Y': [0.4, 0.6, 3.6, 4.8]
})
# 步骤1:对分类列做数值编码(保持原始顺序)
df['A_code'] = df['A'].astype('category').cat.codes
df['B_code'] = df['B'].astype('category').cat.codes
# 步骤2:绘制平行坐标图(仅传入编码后的数值列)
fig = px.parallel_coordinates(
df,
dimensions=['A_code', 'B_code', 'X', 'Y'],
labels={
'A_code': 'A', # 显示为原始列名
'B_code': 'B',
'X': 'X',
'Y': 'Y'
},
color='X',
color_continuous_scale=px.colors.diverging.Tealrose,
color_continuous_midpoint=2.5,
title="Parallel Coordinates with Mixed Categorical & Numerical Axes"
)
# 步骤3:重设 X 轴刻度标签(关键!确保轴标题正确对齐)
fig.update_layout(
xaxis=dict(
tickvals=[0, 1, 2, 3], # 对应 dimensions 中第0~3个维度
ticktext=['A', 'B', 'X', 'Y'] # 显示用户友好的轴名
),
yaxis=dict(showticklabels=True) # 确保数值轴保留刻度值
)
fig.show()注意事项与进阶建议
- ✅ 编码顺序可控:.cat.codes 默认按首次出现顺序编码;若需自定义顺序(如 ['b','a'] 优先),先调用 pd.Categorical(df['A'], categories=['b','a']);
- ⚠️ 避免混淆原始值:图中分类轴的 Y 方向刻度是编码值(如 0, 1),不代表原始语义。切勿在 dimensions 中混入未编码的原始字符串列,否则会报错;
- ? 颜色映射优化:推荐用业务关键数值列(如目标变量或主指标)着色;若需按分类列着色,应改用 px.parallel_categories 并手动转换数值列为类别;
- ? 多分类轴扩展:该方法天然支持任意数量的分类列——只需批量编码并加入 dimensions 列表即可;
- ? 交互提示增强:可通过 hover_data 参数添加原始类别列(如 hover_data=['A', 'B']),使悬停时显示 'a', '1' 等真实值,大幅提升可解释性。
通过上述方法,你无需切换图表类型或牺牲交互能力,即可在一个 Plotly 平行坐标图中无缝融合定性分析与定量洞察——这是探索高维混合型数据结构的理想实践。

















