Я пытаюсь добавить цветовую шкалу к трехмерной диаграмме рассеяния. Это действительно работает, за исключением того, что при последующих вызовах функции цветовая шкала оставляет старые метки галочки на экране и записывает новые метки поверх них, превращая метки в визуальные спагетти. Вызов cbar.ax.clear () не помогает. Кроме того, на графике не отображаются метки X, Y и Z, и есть едва заметный кусок текста, выглядывающий из-под края холста. Я уверен, что делаю что-то в неправильном порядке, но не могу понять, что именно.
def mplPlotColorCloud(figure, canvas, vals, xlabel, ylabel, zlabel):
xvect = [val[0] for val in vals]
yvect = [val[1] for val in vals]
zvect = [val[2] for val in vals]
valvect = [val[3] for val in vals]
ax = figure.add_subplot(111, projection='3d')
# discards the old graph
ax.hold(False)
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.set_zlabel(zlabel)
cax = ax.scatter(xvect, yvect, zvect, c=valvect, cmap=None)
# Make a colorbar
minval = np.min(valvect)
maxval = np.max(valvect)
if minval != maxval:
ticks = list(np.linspace(minval, maxval, num=3))
tickLabels = [str(np.round(x,2)) for x in ticks]
cbar = figure.colorbar(cax, ticks=ticks, orientation='vertical')
cbar.ax.set_xticklabels(tickLabels)
else:
figure.colorbar(cax, orientation='vertical')
canvas.draw()