как использовать imshow с новыми set_aspect и clim?

#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) его на месте