在Python中将回归线和椭圆添加到三维散点图中

2024-04-25 03:37:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个三维散点图,它显示一个名为data的数据帧。 它通常生成一个可以与一条直线或椭圆相匹配的形状。在

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

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

ax.scatter(data['x'], data['y'], data['z'], c=data['c'])

plt.show()

典型示例(抱歉,我无法共享我的数据…):

3D scatter plot

所以,现在我想计算一个多元回归来拟合这个点云。 有很多文章解释如何把这个和飞机配合起来,但我想给它配一条线。在

作为一个额外的奖励,我还想用一个椭圆拟合这些点。因此,它将反映标准偏差,并且更加直观。在


Tags: 数据fromimportdataasfigpltax
1条回答
网友
1楼 · 发布于 2024-04-25 03:37:55

我找到了第一个问题的答案,那就是找到一条最适合点云的线。我在Python中改编了this post

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

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

data = pd.DataFrame([[-1, 15, 2], [2, 6, 8], [5, 4, 20], [1, 5, 20], [3, 9, 12]],
                    columns=['x', 'y', 'z'])
ax.scatter(data['x'], data['y'], data['z'], c='blue')

# Linear regression
X = data[['x', 'y', 'z']].values
Xlen = X.shape[0]
avgPointCloud = 1 / Xlen * np.array([np.sum(X[:, 0]), np.sum(X[:, 1]), np.sum(X[:, 2])])
Xmean = X - avgPointCloud

cov = 1 / Xlen * X.T.dot(Xmean)

t = np.arange(-5, 5, 1)
linearReg = avgPointCloud + cov[:, 0] * np.vstack(t)

ax.plot(linearReg[:, 0], linearReg[:, 1], linearReg[:, 2], 'r', label='Linear Regression')
ax.legend()

plt.show()

enter image description here

相关问题 更多 >