【发布时间】:2020-05-12 10:44:51
【问题描述】:
我正在尝试制作一个 3D 图表来绘制拟合回归曲面。我看过下面的例子。
Plot linear model in 3d with Matplotlib
Combining scatter plot with surface plot
Best fit surfaces for 3 dimensional data
但是,第一个非常过时并且不再工作,第二个是相关的,但是我在生成 Z 的值时遇到了一些麻烦。
我能找到的所有示例都是过时的或低级的模拟数据示例。可能有比Z 更多的问题。
请看下面的代码。
import numpy as np
import seaborn as sns
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
df = sns.load_dataset('mpg')
df.dropna(inplace=True)
model = smf.ols(formula='mpg ~ horsepower + acceleration', data=df)
results = model.fit()
x, y = model.exog_names[1:]
x_range = np.arange(df[x].min(), df[x].max())
y_range = np.arange(df[y].min(), df[y].max())
X, Y = np.meshgrid(x_range, y_range)
# Z = results.fittedvalues.values.reshape()
fig = plt.figure(figsize=plt.figaspect(1)*3)
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, alpha = 0.2)
更新:
我把Z改成下面是对的
Z = results.params[0] + X*results.params[1] + Y*results.params[2]
并追加
ax.scatter(df[x], df[y], df[model.endog_names], s=50)
ax.view_init(20, 120)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
我得到了下面的情节,但我不确定它是否正确。
如果可能,我还想为绘制的表面添加投影。
【问题讨论】:
-
results.fittedvalues.values的形状是什么?在进行任何显式重塑之前 -
它是 1-d,但 Z 必须是 2-d 什么的...
-
确实如此,但我所说的形状是指
results.fittedvalues.values.shape返回什么? -
它返回 (392,)
-
df[x].values.shape和df[y].values.shape怎么样
标签: python numpy matplotlib