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

如何基于带聚类标签的pandas DataFrame xyz坐标绘制3D plt.scatter散点图

3D聚类散点图实现方案

基础Matplotlib实现

直接用matplotlib内置的3D投影接口即可实现,代码如下:

  • 导入依赖库
import pandas as pd
import matplotlib.pyplot as plt
  • 核心绘图逻辑,假设你的DataFrame变量名为df
# 初始化3D画布
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(projection='3d')

# 绘制散点图,按label列自动分配聚类颜色
scatter = ax.scatter(
    df['x'], 
    df['y'], 
    df['z'], 
    c=df['label'], 
    cmap='viridis',  # 可替换为你偏好的配色方案
    s=10,  # 点的大小
    alpha=0.6  # 透明度,避免点堆叠导致分布看不清
)

# 补充图表信息
ax.set_xlabel('X坐标')
ax.set_ylabel('Y坐标')
ax.set_zlabel('Z坐标')
plt.legend(
    handles=scatter.legend_elements()[0],
    labels=[f"聚类{i}" for i in set(df['label'].astype(int))],
    title="聚类结果"
)
plt.show()

大数据量优化方案

针对你提到的数据集规模较大的场景,可以通过以下方式优化渲染效率:

  • 缩小点的尺寸:将s参数调整为1~3,减少单个点的渲染开销
  • 降低透明度:将alpha参数调整为0.3~0.5,优化堆叠点的显示效果
  • 随机降采样:如果数据量超过10万条,可抽取部分样本绘制,不影响整体分布的前提下大幅提升速度,示例:
# 随机抽取10%的样本绘图,random_state固定保证结果可复现
sample_df = df.sample(frac=0.1, random_state=42)
scatter = ax.scatter(
    sample_df['x'], 
    sample_df['y'], 
    sample_df['z'], 
    c=sample_df['label'], 
    cmap='viridis', 
    s=2, 
    alpha=0.4
)
  • 采用交互式渲染:如果需要查看细节可改用plotly绘制,内置WebGL加速适合渲染大数据量3D图:
import plotly.express as px
fig = px.scatter_3d(df, x='x', y='y', z='z', color='label')
fig.update_traces(marker=dict(size=2, opacity=0.4))
fig.show()
# 可导出为html文件离线打开查看
fig.write_html("3d聚类散点图.html")

内容的提问来源于stack exchange,提问作者Saad el harchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:45:04