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

如何在px.scatter_3d中绘制3D PCA类间分离平面

Plotly 3D PCA散点图添加类间分离平面实现方案

不需要修改你已经完成的PCA计算、散点图基础配置代码,直接在原有代码后追加平面绘制逻辑即可,所有库调用、PCA参数、散点图样式、数据结构完全保留原有设定。

实现逻辑

  • 基于二分类特征训练线性SVM,得到两类样本的最优线性分隔超平面
  • 在PCA降维后的3维坐标空间生成覆盖散点范围的平面网格
  • 将平面作为独立Surface图层追加到px.scatter_3d生成的Figure对象中,不影响原有散点的所有配置

可直接衔接的代码

代码中分隔线以上为你已经编写完成的逻辑,无需做任何改动,分隔线以下为需要追加的分离平面绘制代码:

import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.svm import LinearSVC
import plotly.express as px
import plotly.graph_objects as go

# --- 以下是你已完成的代码,无需修改 ---
# PCA计算逻辑(保留你原有参数配置)
pca = PCA(n_components=3)
# 假设最终输出的3维PCA结果存在df_pca中,列结构为['PC1', 'PC2', 'PC3', 'label'],label为二分类标签
# 原有3D散点图配置(保留你所有自定义的颜色、大小、透明度等样式参数)
fig = px.scatter_3d(
    df_pca,
    x='PC1',
    y='PC2',
    z='PC3',
    color='label'
)
# --- 以上是你已完成的代码,无需修改 ---

# ========== 追加以下分离平面绘制代码 ==========
# 训练线性分类器获取最优分隔超平面参数
X = df_pca[['PC1', 'PC2', 'PC3']].values
y = df_pca['label'].values
clf = LinearSVC(dual='auto', max_iter=10000).fit(X, y)

# 生成覆盖散点范围的平面网格
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(
    np.linspace(x_min, x_max, 50),
    np.linspace(y_min, y_max, 50)
)

# 根据超平面公式w0*x + w1*y + w2*z + b = 0计算z轴坐标
w = clf.coef_[0]
b = clf.intercept_[0]
zz = (-w[0] * xx - w[1] * yy - b) / w[2]

# 将平面图层追加到原有散点图
fig.add_trace(
    go.Surface(
        x=xx,
        y=yy,
        z=zz,
        showscale=False, # 隐藏平面自带色条,避免和散点图例冲突
        opacity=0.3, # 平面透明度,避免遮挡散点
        colorscale=[[0, '#e5e5e5'], [1, '#e5e5e5']], # 平面默认设为浅灰色
        name='类间分离平面',
        hoverinfo='skip' # 关闭平面悬浮提示,不干扰散点交互
    )
)

# 保留你原有的图表展示逻辑
fig.show()

参数调整参考

  • 平面透明度:修改go.Surface中的opacity参数,推荐取值0.2-0.4,平衡平面可见性和散点可读性
  • 平面颜色:替换colorscale中的十六进制色值即可自定义平面颜色
  • 平面覆盖范围:调整x_min/x_max、y_min/y_max计算时的偏移量(当前为±1),即可放大/缩小平面的展示范围
  • 自定义平面位置:如果不需要SVM计算的最优分隔面,可以跳过模型训练步骤,直接根据你需要的平面公式计算zz值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:42:17