Я пытаюсь сделать 3D-график.У меня возникают проблемы с отображением полной оси с хорошо выровненными метками.Я обрисовал в общих чертах шаги, которые я попробовал ниже.
1) Я могу установить метки оси Y, используя:
yTicks = list(range(0,90,5)
ax.set_yticks(range(len(yTicks)), True)
Однако, как видите, метки очень плохо выровнены.Это также не соответствует тому, что я на самом деле определил, что должно было быть подсчетом тиков на 5, а не на 10.
2) Однако, если я попробую также использовать set_yticklabels
, выравнивание будет исправлено, но онопечатает только часть оси.Вот код и изображение:
ax.set_yticklabels(yTicks, verticalalignment='baseline',
horizontalalignment='left')
Обратите внимание, как ось Y изменилась с 80 до 40.
3) И если я избавлюсь от True
в set_yticks
, все вместе сжимается:
4) Наконец, если я использую и set_yticks
, и set_yticklabels
, вызывая get_yticks()
в функции меток, это почти работает, но вы можете видеть, что линии осей выходят за "поверхность" графика:
ax.set_yticks(range(len(yTicks)), True)
ax.set_yticklabels(ax.get_yticks(), verticalalignment='baseline',
horizontalalignment='left')
5) Вот более полная версия моего кода для справки:
plt.clf()
ax = plt.axes(projection='3d')
ax.bar3d(x,y,z,
1,1,[val*-1 if val != 0 else 0 for val in z])
xTicks = list(range(0,25,2))
yTicks = list(range(30,90,5))
ax.set_zlim(0, 1)
ax.set_xticks(range(len(xTicks)), True)
ax.set_yticks(range(len(yTicks)), True)
ax.set_xticklabels(ax.get_xticks(),
verticalalignment='baseline',
horizontalalignment='left')
ax.set_yticklabels(ax.get_yticks(),
verticalalignment='baseline',
horizontalalignment='left')
plt.savefig(file_path)
Как мне заставить его показать мою полную ось (0-90) с интервалами 5 и хорошо ли он выровнен?
6) UPDATE : в соответствии с приведенным ниже разговором с @ImportanceOfBeingErnest, вот проблема, с которой я все еще сталкиваюсь, используя следующий код:
x=[15,28,20]; y=[30,50,80]; z=[1,1,1]
plt.clf()
ax = plt.axes(projection='3d')
ax.bar3d(x,y,z,
1,1,[val*-1 if val != 0 else 0 for val in z])
xTicks = list(range(0,25,2))
yTicks = list(range(30,90,5))
ax.set_xticks(xTicks)
ax.set_yticks(yTicks)
ax.set_yticklabels(ax.get_yticks(),
verticalalignment='baseline',
horizontalalignment='left')
ax.set_zlim(0, 1)
plt.savefig(getSaveGraphPath(save_name))