ax.plot_surface () неправильно отображает поверхность поверх точек разброса - PullRequest
0 голосов
/ 06 февраля 2020

Я строю данные рассеяния вместе с поверхностью наилучшего соответствия, используя 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 градусов от горизонтали точки рассеяния, лежащие над поверхностью, отображаются правильно:

enter image description here

С другой стороны, если смотреть под углом 5 градусов от горизонтали, точки рассеяния выглядят так, как будто все они находятся под поверхностью:

enter image description here

Я предпочитаю вторую перспективу, но хотел бы, чтобы данные рассеяния, лежащие над поверхностью наилучшего соответствия, отображались правильно.

Как вы можете видеть, я пытался заставить данные разброса вверх использовать zorder, но безуспешно.

Что мне нужно сделать, чтобы исправить отображение точек разброса?

...