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

如何绘制与3D散点图范围匹配的过中心平面?

解决3D散点图中平面与散点范围不匹配的问题

我来帮你搞定这个问题!你的平面之所以把散点挤到一侧,核心问题是生成平面时的x、y轴范围没有和散点的实际数据范围对齐,而且linspace的参数使用有误。咱们一步步修正:

问题分析

  1. 你用df['fixed acidity'].shape作为linspace的上下限,这是错误的——shape返回的是数据的维度(比如(1599,)),不是数值范围,导致平面的x、y轴范围完全偏离散点的实际分布。
  2. 平面的x、y范围没有覆盖散点的index和fixed acidity的全部取值区间,自然会和散点图大小不匹配。

修正后的代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

df = pd.read_csv('wr.csv')
df = df.sample(frac=1)

# 获取散点各轴的实际范围,用于生成平面的x、y网格
x_min, x_max = df.index.min(), df.index.max()
y_min, y_max = df['fixed acidity'].min(), df['fixed acidity'].max()
# 计算z轴的均值(保持你原本的平面逻辑)
z_plane = np.mean(np.square(df['fixed acidity']))

# 生成覆盖散点x、y范围的网格,num控制网格密度,可按需调整
X = np.linspace(x_min, x_max, num=50)
Y = np.linspace(y_min, y_max, num=50)
x, y = np.meshgrid(X, Y)
# 生成和x网格同形状的z值矩阵,确保平面平整
z = np.full_like(x, z_plane)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制散点
ax.scatter(df.index, df['fixed acidity'], np.square(df['fixed acidity']), s=5, color='black')
# 绘制中心点
ax.scatter(np.mean(df.index), np.mean(df['fixed acidity']), z_plane, color='orange', s=300)
# 绘制匹配范围的平面
ax.plot_surface(x, y, z, alpha=0.5)

# 可选:添加轴标签,提升图表可读性
ax.set_xlabel('Index')
ax.set_ylabel('Fixed Acidity')
ax.set_zlabel('Square of Fixed Acidity')

plt.show()

关键修正点

  • 用散点的index和fixed acidity的实际最小/最大值定义平面的x、y范围,确保平面完全覆盖散点的分布区域。
  • 用np.full_like(x, z_plane)生成和x网格同形状的z值矩阵,替代原来的x*0+y*0+...,逻辑更清晰且不易出错。
  • 可选添加轴标签,让图表信息更直观。

这样修改后,平面就会和散点图的大小完美匹配,不会再出现散点被挤到一侧的情况啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:45:28