You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Plotly创建仅保留指定行的散点图矩阵?

如何用Plotly生成仅保留指定行的散点图矩阵?

需求说明

我想要创建散点图矩阵(scatter plot matrix,即多变量两两散点图组成的矩阵,用于查看变量间的两两相关性),但希望移除部分变量的行(同时保留这些变量在列中)。

已能生成包含所有变量的完整散点图矩阵,代码如下:

import numpy as np
import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame(
    np.random.randn(1000, 5),
    columns=['A', 'B', 'C', 'M1', 'M2']
)
fig = go.Figure(
    data=go.Splom(
        dimensions=[dict(label=c, values=df[c]) for c in df.columns],
        text=df.index,
        marker=dict(
            size=3,
            color=df['M1'],
            colorscale='Bluered',
        ),
    )
)
fig.show()

希望得到的效果是:仅保留对应M1和M2的行,列仍保留所有变量(A、B、C、M1、M2),即矩阵中仅显示两行散点图,其余行隐藏,且输出为交互式HTML。

解决方案

Plotly原生go.Splom没有直接隐藏指定行的参数,但可以通过手动构建子图网格的方式实现需求,同时保留交互性。以下是实现代码:

import numpy as np
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# 创建数据
df = pd.DataFrame(
    np.random.randn(1000, 5),
    columns=['A', 'B', 'C', 'M1', 'M2']
)

# 定义要保留的行变量和所有列变量
row_vars = ['M1', 'M2']
col_vars = df.columns.tolist()
n_rows = len(row_vars)
n_cols = len(col_vars)

# 创建子图网格
fig = make_subplots(
    rows=n_rows,
    cols=n_cols,
    shared_yaxes=True,  # 每行共享y轴
    shared_xaxes='columns',  # 每列共享x轴
)

# 逐个添加散点图
for row_idx, y_var in enumerate(row_vars, start=1):
    for col_idx, x_var in enumerate(col_vars, start=1):
        fig.add_trace(
            go.Scatter(
                x=df[x_var],
                y=df[y_var],
                mode='markers',
                marker=dict(
                    size=3,
                    color=df['M1'],
                    colorscale='Bluered',
                ),
                text=df.index,
                showlegend=(row_idx == 1 and col_idx == 1)  # 仅第一个子图显示图例
            ),
            row=row_idx,
            col=col_idx
        )

# 调整布局,优化视觉效果
fig.update_layout(
    height=400 * n_rows,
    width=300 * n_cols,
    title_text="仅保留M1、M2行的散点图矩阵",
    showlegend=True,
    margin=dict(l=50, r=50, t=80, b=50)
)

# 设置轴标签
for row_idx, y_var in enumerate(row_vars, start=1):
    fig.update_yaxes(title_text=y_var, row=row_idx, col=1)
for col_idx, x_var in enumerate(col_vars, start=1):
    fig.update_xaxes(title_text=x_var, row=n_rows, col=col_idx)

fig.show()

代码说明

  • 用make_subplots构建指定行列的子图网格,通过共享轴参数保证变量轴的一致性
  • 遍历目标行变量和所有列变量,手动添加每个散点图,精准控制显示的行
  • 标记样式、颜色设置与原散点图矩阵保持一致,保留悬停显示索引、缩放平移等交互功能
  • 调整布局参数,让最终效果接近原生散点图矩阵的视觉体验

内容的提问来源于stack exchange,提问作者leleogere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:40:27