Plotly.express.scatter_matrix一键生成散点图矩阵最省事稳定,自动处理两两组合、坐标轴共享、颜色映射及对角线分布图;输入需为无特殊字符列名的DataFrame,嵌入仪表盘应使用to_html(full_html=False)提取片段而非iframe。

直接用 Plotly 做矩阵散点图(即散点图矩阵,scatter_matrix)最省事,HTML 仪表盘里嵌入它,比手写 ECharts 配置或拼 Canvas 快得多,也更稳。
用 Plotly.express.scatter_matrix 一键生成矩阵散点图
这是最常用、最不容易翻车的方式。它自动处理变量两两组合、共享坐标轴、颜色映射和交互逻辑,连对角线直方图/密度图都默认带好。
- 输入必须是
pandas.DataFrame,列名就是维度标签,不能有空格或特殊字符(否则会报ValueError: Column name contains invalid character) - 关键参数:
dimensions列表指定参与矩阵的列(顺序影响排列),color指定分组字段(必须是类别型或可离散化的数值),title和height控制显示效果 - 别漏掉
fig.write_html("matrix.html")—— 这步才真正导出可独立打开的HTML文件;如果只调fig.show(),它只是在本地临时弹个窗口,关掉就没了
import plotly.express as px
import pandas as pd
<p>df = pd.read_csv("data.csv") # 确保没有缺失值,或提前 dropna()
fig = px.scatter_matrix(
df,
dimensions=["age", "income", "score", "duration"],
color="segment", # 必须是字符串列,不是数字编码后的 int
title="用户行为四维散点矩阵",
height=800
)
fig.write_html("scatter_matrix.html")</p>
嵌入现有 HTML 仪表盘时,避免 iframe 加载失败
很多人把 scatter_matrix.html 直接用 套进主页面,结果白屏——常见原因是路径不对或跨域限制(尤其用 file:// 协议本地双击打开时)。
- 正确做法:用
fig.to_html(include_plotlyjs='cdn', full_html=False)提取纯 HTML 片段,再塞进你主页面的里,最后用document.getElementById(...).innerHTML = ...注入 -
include_plotlyjs='cdn'表示从官方 CDN 加载 JS,不用打包大文件;若需离线运行,改用'directory'并确保同级有_plotly文件夹 - 注意:生成的片段含
<script></script>标签,必须在 DOM 加载完成后执行,否则Plotly.newPlot找不到容器
手动控制矩阵布局?别碰 scattergl + subplots
有人想用 plotly.graph_objects 手动建 n×n 子图,再一个个塞 go.Scattergl,理论上可行,但实际踩坑密集:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
-
Scattergl不支持所有 marker 属性(比如size映射到第三维时容易失真) - 子图间坐标轴同步极难做(
matches参数对矩阵场景支持弱,缩放一个图,其余不联动) - 对角线位置要单独画直方图,还得手动对齐 bin 数量和范围,稍有偏差整个矩阵就“错位”
- 移动端手势(双指缩放、拖拽)在手动子图中常失效
除非你明确需要自定义每个散点的 tooltip 文本或点击回调函数,否则没必要绕开 scatter_matrix。
数据量大时卡顿?先降采样再画
scatter_matrix 在 10 万点以上就会明显变慢,浏览器可能弹“脚本未响应”。这不是代码问题,是 WebGL 渲染瓶颈。
- 简单有效方案:用
df.sample(n=5000, random_state=42)随机抽样,人类视觉根本分辨不出 5k 和 50k 的分布差异 - 如果业务上必须看全量,改用
px.density_heatmap替代部分子图(例如下三角用热力图,上三角保留散点),或启用opacity=0.3减少重叠遮挡 - 绝对不要在矩阵里加
text字段(比如给每个点标 ID)——这会让 DOM 节点爆炸式增长
矩阵散点图真正的难点从来不在“怎么画出来”,而在于“怎么让业务方一眼看出哪两个变量值得深挖”。所以别花时间调 marker 形状或动画,优先确保 color 字段语义清晰、坐标轴 label 无歧义、异常点能被快速识别——这些细节比技术实现更容易被忽略。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










