Сделать Matplotlib сюжет бинарную карту, начиная с 1 - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть двумерный массив, и я хочу показать его как двоичную тепловую карту.Я использую следующий фрагмент кода:

m = np.random.randint(1, 5, (5,5))
plt.imshow(m, cmap='binary')

Однако, таким образом, ось будет от 0 до 4. Есть ли способ изменить ее на 1 до 5?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вы можете использовать функцию построения pcolormesh, которая позволяет указывать координаты ваших данных вместо imshow.Вот несколько примеров:

enter image description here

enter image description here

И вот полный код, который использовался длясоздайте изображения выше:

import matplotlib.pyplot as plt
import numpy as np

def plotBinary(mmin=1, mmax=5):
    x = np.arange(mmin-1, mmax+2)
    cen = (x[:-1] + x[1:])/2
    X,Y = np.meshgrid(cen, cen)

    m = np.random.randint(mmin, mmax+1, X.shape)
    plt.pcolormesh(X, Y, m, cmap='binary')

plotBinary()
plt.show()
plotBinary(3, 10)
plt.show()

Объяснение координат в pcolormesh

pcolormesh ожидает, что координаты X и Y будут переданы в виде сеток.Учитывая, что у вас есть одномерные списки x и y ваших координат x и y, вы можете вызвать X,Y = np.mesgrid(x, y), чтобы сгенерировать для вас координатные сетки X и Y.Таким образом, вам не нужно беспокоиться о фактическом синтаксисе координатных сеток, что приятно.

В приведенной выше функции plotBinary, cen - это список центров блоков.Это также наш список координат x и y, поэтому необходимые координатные сетки генерируются путем вызова np.meshgrid(cen, cen) с cen в качестве обоих аргументов.

0 голосов
/ 27 ноября 2018

Вы можете сделать это так:

plt.xticks(range(m.shape[1]), range(1, m.shape[1] + 1))
plt.yticks(range(m.shape[0]), range(1, m.shape[0] + 1))

Документация о plt.xticks.

РЕДАКТИРОВАТЬ

В случае seaborn:

sns.heatmap(m, cmap='binary', xticklabels=range(1, m.shape[1] + 1), yticklabels=range(1, m.shape[0] + 1))

Документация о seaborn.heatmap.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...