Изменение значений на оси графика matplotlib imshow()


скажем, у меня есть некоторые входные данные:

data = np.random.normal(loc=100,scale=10,size=(500,1,32))
hist = np.ones((32,20)) # initialise hist
for z in range(32):
    hist[z],edges = np.histogram(data[:,0,z],bins=np.arange(80,122,2))

Я могу построить его с помощью imshow():

plt.imshow(hist,cmap='Reds')

начало:

однако значения по оси x не соответствуют входным данным (т. е. среднее значение 100, диапазон от 80 до 122). Поэтому я хотел бы изменить ось x, чтобы показать значения в edges.

Я пробовал:

ax = plt.gca()
ax.set_xlabel([80,122]) # range of values in edges
...
# this shifts the plot so that nothing is visible

и

ax.set_xticklabels(edges)
...
# this labels the axis but does not centre around the mean:

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

1 55

1 ответ:

Я бы постарался не менять xticklabels если это возможно, в противном случае она может быть очень запутанным, если вы, например, построить гистограмма с дополнительными данными.

определение диапазона вашей сетки, вероятно, является лучшим и с imshow Это можно сделать, добавив extent ключевое слово. Таким образом, оси настраиваются автоматически. Если вы хотите изменить метки я бы использовал set_xticks возможно, с некоторым форматом. Изменение меток непосредственно должно быть последним курорт.

fig, ax = plt.subplots(figsize=(6,6))

ax.imshow(hist, cmap=plt.cm.Reds, interpolation='none', extent=[80,120,32,0])
ax.set_aspect(2) # you may also use am.imshow(..., aspect="auto") to restore the aspect ratio

enter image description here