Я строю данные рассеяния вместе с поверхностью наилучшего соответствия, используя ax.plot_surface()
:
fig = plt.figure(figsize = (7,5))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap=plt.cm.coolwarm, alpha=0.25, edgecolor='black', linewidth=.25, zorder=-1)
ax.scatter(x_filtered, y_filtered, z_filtered, alpha=0.25, lw=0, color='black', zorder=10)
ax.axes.set_xlim3d(left=0, right=20)
ax.axes.set_ylim3d(top=0, bottom=250000)
ax.axes.set_zlim3d(bottom=0, top=40000)
x_start, x_end = ax.get_xlim()
z_start, z_end = ax.get_zlim()
ax.xaxis.set_ticks(np.arange(x_start, x_end, 5))
ax.zaxis.set_ticks(np.arange(z_start, z_end, 10000))
ax.set_xlabel('\nAge (y)')
ax.set_ylabel('\nMileage (k)')
ax.set_zlabel('Price ($k)')
plt.rcParams['axes.unicode_minus'] = False
plt.grid(); ax.grid(color=(.9, .9, .9)); ax.set_axisbelow(True)
import matplotlib.ticker as ticker
ticks = ticker.FuncFormatter(lambda y_filtered, pos: '{0:g}'.format(y_filtered/1000))
ticks = ticker.FuncFormatter(lambda z_filtered, pos: '{0:g}'.format(z_filtered/1000))
ax.yaxis.set_major_formatter(ticks)
ax.zaxis.set_major_formatter(ticks)
ax.view_init(60, -45)
ax.dist = 10.75
plt.show()
При просмотре под углом 60 градусов от горизонтали точки рассеяния, лежащие над поверхностью, отображаются правильно:
С другой стороны, если смотреть под углом 5 градусов от горизонтали, точки рассеяния выглядят так, как будто все они находятся под поверхностью:
Я предпочитаю вторую перспективу, но хотел бы, чтобы данные рассеяния, лежащие над поверхностью наилучшего соответствия, отображались правильно.
Как вы можете видеть, я пытался заставить данные разброса вверх использовать zorder
, но безуспешно.
Что мне нужно сделать, чтобы исправить отображение точек разброса?