Python 中使用 matplotlib 的线性模型的 3d 曲面图
3d Surface plot from linear model with matplotlib in Python
以下代码运行良好。但现在它抛出以下错误:
AttributeError: 'Series' object has no attribute 'reshape'
代码:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import statsmodels.formula.api as sm
from matplotlib import cm
csv = pd.read_csv('http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv', index_col=0)
print(csv)
model = sm.ols(formula='sales ~ TV + radio', data = csv)
fit = model.fit()
fit.summary()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x_surf = np.arange(0, 350, 20) # generate a mesh
y_surf = np.arange(0, 60, 4)
x_surf, y_surf = np.meshgrid(x_surf, y_surf)
exog = pd.core.frame.DataFrame({'TV': x_surf.ravel(), 'radio': y_surf.ravel()})
out = fit.predict(exog = exog)
ax.plot_surface(x_surf, y_surf,
out.reshape(x_surf.shape),
rstride=1,
cstride=1,
color='None',
alpha = 0.4)
ax.scatter(csv['TV'], csv['radio'], csv['sales'],
c='blue',
marker='o',
alpha=1)
ax.set_xlabel('TV')
ax.set_ylabel('Radio')
ax.set_zlabel('Sales')
plt.show()
您必须在 "out" 系列对象的 "values" 属性上调用重塑函数:
out = fit.predict(exog = exog)
ax.plot_surface(x_surf, y_surf,
out.values.reshape(x_surf.shape),
rstride=1,
cstride=1,
color='None',
alpha = 0.4)
以下代码运行良好。但现在它抛出以下错误:
AttributeError: 'Series' object has no attribute 'reshape'
代码:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import statsmodels.formula.api as sm
from matplotlib import cm
csv = pd.read_csv('http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv', index_col=0)
print(csv)
model = sm.ols(formula='sales ~ TV + radio', data = csv)
fit = model.fit()
fit.summary()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x_surf = np.arange(0, 350, 20) # generate a mesh
y_surf = np.arange(0, 60, 4)
x_surf, y_surf = np.meshgrid(x_surf, y_surf)
exog = pd.core.frame.DataFrame({'TV': x_surf.ravel(), 'radio': y_surf.ravel()})
out = fit.predict(exog = exog)
ax.plot_surface(x_surf, y_surf,
out.reshape(x_surf.shape),
rstride=1,
cstride=1,
color='None',
alpha = 0.4)
ax.scatter(csv['TV'], csv['radio'], csv['sales'],
c='blue',
marker='o',
alpha=1)
ax.set_xlabel('TV')
ax.set_ylabel('Radio')
ax.set_zlabel('Sales')
plt.show()
您必须在 "out" 系列对象的 "values" 属性上调用重塑函数:
out = fit.predict(exog = exog)
ax.plot_surface(x_surf, y_surf,
out.values.reshape(x_surf.shape),
rstride=1,
cstride=1,
color='None',
alpha = 0.4)