matplotlib matshow метки

Я начал использовать matplotlib месяц назад, так что я все еще учусь.
Я пытаюсь сделать тепловую карту с помощью matshow. Мой код следующий:

data = numpy.array(a).reshape(4, 4)  
cax = ax.matshow(data, interpolation='nearest', cmap=cm.get_cmap('PuBu'), norm=LogNorm())  
cbar = fig.colorbar(cax)

ax.set_xticklabels(alpha)  
ax.set_yticklabels(alpha)

где альфа — это модель от django с 4 полями: «ABC», «DEF», «GHI», «JKL»

дело в том, что я не знаю почему, метка «ABC» не появляется, оставляя последнюю ячейку без метки.
Если кто-то знает, как изменить мой скрипт таким образом, чтобы отображалась «ABC ' Буду признателен :)


person psoares    schedule 20.08.2010    source источник


Ответы (2)


Что происходит, так это то, что xticks фактически выходит за пределы отображаемой фигуры при использовании matshow. (Я не совсем уверен, почему это так. Хотя я почти никогда не использовал matshow.)

Чтобы продемонстрировать это, посмотрите на вывод ax.get_xticks(). В вашем случае это array([-1., 0., 1., 2., 3., 4.]). Поэтому, когда вы устанавливаете метки xtick, «ABC» находится на ‹-1, -1> и не отображается на рисунке.

Самое простое решение — просто добавить пустую метку к списку меток, например.

ax.set_xticklabels(['']+alpha)
ax.set_yticklabels(['']+alpha)

В качестве полного примера:

import numpy as np
import matplotlib.pyplot as plt

alpha = ['ABC', 'DEF', 'GHI', 'JKL']

data = np.random.random((4,4))

fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(data, interpolation='nearest')
fig.colorbar(cax)

ax.set_xticklabels(['']+alpha)
ax.set_yticklabels(['']+alpha)

plt.show()

Пример Matshow

person Joe Kington    schedule 20.08.2010
comment
Благодарю вас! Я видел то же самое :) Но у меня другая проблема. Я делаю две тепловые карты, одну (4x4) и другую (9x9). Программа помечает тепловую карту 0,2,4,6,8. Поэтому, когда я пытался пометить, она только дает имя этим числам. Я пробовал использовать ax.set_xticks(matplotlib.numpy.arange(len(list_names))), но это уменьшает размер ячеек.. - person psoares; 20.08.2010
comment
@Patricia. Если вы установите галочки вручную, вызов ax.axis('image') после их установки должен решить проблему, которую вы описали. Надеюсь, это поможет! - person Joe Kington; 20.08.2010
comment
Спасибо! Проблема решена :) Итак, ax.axis('image') восстанавливает исходный размер изображения, верно? - person psoares; 20.08.2010
comment
В принципе. (Честно говоря, я не уверен, почему пределы оси меняются, когда установлены метки... Это может быть ошибка...) Подробнее о том, что делает ax.axis('image'), см. здесь: matplotlib.sourceforge.net/api/ - person Joe Kington; 20.08.2010

Другой способ сделать это — указать галочки, а затем установить соответствующие метки. Тогда вам не придется беспокоиться о дополнительном галочке за пределами границ. Это встречается во многих демонстрациях matplotlib. Итак, обратите внимание на дополнительные вызовы ax.set_xticks и ax.set_yticks

import numpy as np
import matplotlib.pyplot as plt

alpha = ['ABC', 'DEF', 'GHI', 'JKL']

data = np.random.random((4,4))

fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(data, interpolation='nearest')
fig.colorbar(cax)

xaxis = np.arange(len(alpha))
ax.set_xticks(xaxis)
ax.set_yticks(xaxis)
ax.set_xticklabels(alpha)
ax.set_yticklabels(alpha)

plt.show()

введите здесь описание изображения

person premes    schedule 04.12.2020