#python #matplotlib
Вопрос:
Раньше я мог создавать 2d-графики с помощью
x=np.linspace(0,1,5)
y=np.linspace(1,100,5)
img=np.ones([len(x),len(y)])*500
plt.imshow(img,extent=(x[0], x[-1], y[-1], y[0]))
plt.axes().set_aspect(0.06)
plt.clim(0,500)
plt.show()
Теперь, установив аспект, я получу пустое изображение (такое же, как здесь: https://cloudstack.ninja/xotix/plt-axes-set_aspectequal-destroys-plot-by-adding-a-lot-of-white-space/)
Если я попытаюсь воспользоваться топором. стиль сюжета, я больше не могу использовать plt.clim(0,500):
ax = fig.add_subplot(111)
ax.imshow(img,extent=(x[0], x[-1], y[-1], y[0]))
### ax.set_clim(0,500) # not a function
ax.set_xlabel('$t$ [ns]')
ax.set_ylabel('$lambda$ [nm]')
ax.set_aspect(0.06)
ax.set_xlim(5,11)
ax.set_ylim(351,290)
fig.show()
Есть ли здесь другая замена set_clim? Я искал, но ничего не смог найти. Спасибо.
Комментарии:
1. Plt.axes создает новые оси. Вы хотите plt.gca()
Ответ №1:
Вы можете дать clim
в качестве кварга , когда звоните imshow
, например:
im = ax.imshow(img,extent=(x[0], x[-1], y[-1], y[0]), clim=(0, 500))
В качестве альтернативы, если вы зафиксируете AxesImage
возвращаемое imshow
значение в переменной (здесь я называю его im
), вы можете использовать im.set_clim()
его для установки clim
позже.
im = ax.imshow(img,extent=(x[0], x[-1], y[-1], y[0]))
im.set_clim(0, 500)
И, как отметил @Jody Klymak в комментариях, причина, по которой ваш первый вариант не работает, заключается в том, что plt.axes()
создается новый экземпляр Axes. Вместо этого вы могли бы использовать plt.gca().set_aspect(0.06)
его на месте