Сетка моего matplot выключена на -0.5 - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь применить цветовое сопоставление к 2d массиву, используя библиотеку matplotlib и python 3. Для простоты я сделал пример кода, чтобы показать мою проблему:

Пример кода:

    from matplotlib import pyplot as plt
    from matplotlib import colors
    import numpy as np

    #just an example array
    sample= np.zeros((20,20),dtype=int)
    sample[2,2]=sample[4,4]=2
    #color-table and color bounds
    cmap = colors.ListedColormap(['black','white','red','green'])
    bounds=[-6,0,1,99,105]
    norm = colors.BoundaryNorm(bounds, cmap.N)

    fig, ax = plt.subplots()
    ax.imshow(sample,interpolation='nearest', cmap=cmap, norm=norm)
    ax.grid(which='major', axis='both', linestyle='-', color='k', linewidth=2)
    ax.set_xlim(0, 20)
    ax.set_ylim(20, 0)

    ax.set_xticks(np.arange(0,20,1))
    ax.set_yticks(np.arange(0,20,1))
    plt.show()

С этим кодом у меня есть сетка 20 на 20, которая везде белая, за исключением двух ячеек [2,2] и [4,4], которые должны быть красного цвета. Проблема в том, что когда я показываю свою сетку, клетки отключаются на -0,5 в обоих направлениях. Что я получаю с этим примером кода: enter image description here

если я сместлю сетки на -0,5 с помощью:

    ax.set_xticks(np.arange(-0.5,20,1))
    ax.set_yticks(np.arange(-0.5,20,1))

Тогда мои клетки выглядят правильно, а теперь все сетки неверны! enter image description here

что не так с моим кодом? Я действительно не понимаю, как это может произойти? !!

1 Ответ

0 голосов
/ 26 апреля 2018

В разделе Примечания строки документа ax.imshow указано:

Если не используется экстент , центры пикселей будут расположены в целых числах координаты. Другими словами: происхождение будет совпадать с центром пикселя (0, 0).

Итак, ваш звонок становится:

ax.imshow(sample, interpolation='none', cmap=cmap, norm=norm,
          extent=[0, 20, 20, 0])
...