Настройка линий сетки и ТИКов в matplotlib imshow

Я пытаюсь построить матрицу значений и хотел бы добавить линии сетки, чтобы сделать границы между значениями яснее. К сожалению, imshow решил найти метки в середине каждого воксела. Возможно ли

a) удалите галочки, но оставьте метку в том же месте и
б) добавить линии сетки между границами пикселей?

import matplotlib.pyplot as plt
import numpy as np

im = plt.imshow(np.reshape(np.random.rand(100), newshape=(10,10)),
                    interpolation='none', vmin=0, vmax=1, aspect='equal');
ax = plt.gca();
ax.set_xticks(np.arange(0, 10, 1));
ax.set_yticks(np.arange(0, 10, 1));
ax.set_xticklabels(np.arange(1, 11, 1));
ax.set_yticklabels(np.arange(1, 11, 1));

изображение без линии сетки и с галочками в неправильном местоположение enter image description here

ax.grid(color='w', linestyle='-', linewidth=2)

Изображение с линиями сетки в неправильном месте:

enter image description here

2 ответов


Попробуйте сдвинуть оси тиков:

ax = plt.gca()
ax.set_xticks(np.arange(-.5, 10, 1))
ax.set_yticks(np.arange(-.5, 10, 1))
ax.set_xticklabels(np.arange(1, 12, 1))
ax.set_yticklabels(np.arange(1, 12, 1))

enter image description here


код для решения, предложенный Serenity:

plt.figure()
im = plt.imshow(np.reshape(np.random.rand(100), newshape=(10,10)),
                interpolation='none', vmin=0, vmax=1, aspect='equal');

ax = plt.gca();
ax = plt.gca();

# Major ticks
ax.set_xticks(np.arange(0, 10, 1));
ax.set_yticks(np.arange(0, 10, 1));

# Labels for major ticks
ax.set_xticklabels(np.arange(1, 11, 1));
ax.set_yticklabels(np.arange(1, 11, 1));

# Minor ticks
ax.set_xticks(np.arange(-.5, 10, 1), minor=True);
ax.set_yticks(np.arange(-.5, 10, 1), minor=True);

# Gridlines based on minor ticks
ax.grid(which='minor', color='w', linestyle='-', linewidth=2)

результирующее изображение: enter image description here