matplotlib: у matshow есть линии сетки в верхней части изображения - PullRequest
1 голос
/ 17 февраля 2020

Я использую pyplot.matshow для построения матрицы и пытаюсь использовать plt.gca().set_axisbelow(True), чтобы линии сетки отображались позади графика, но они всегда находятся сверху. Как сделать так, чтобы линии сетки отображались позади matshow?

import numpy as np
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
plt.rcParams['axes.axisbelow'] = True

m = np.zeros((21, 21))
m[14:17, 12:14] = -0.1

plt.matshow(np.ma.masked_equal(m, 0), cmap=ListedColormap(['k', 'w']), extent=(0.5, 20.5, 20.5, 0.5))
plt.xticks(range(1, 21));
plt.yticks(range(1, 21));
plt.gca().set_axisbelow(True)
plt.grid()

Примечание. Отредактировано для отображения только ненулевых деталей, как отмечено в комментариях.

1 Ответ

1 голос
/ 18 февраля 2020

Вы можете изменить цвет сетки на тот же цвет, что и квадраты (вместо темно-серого по умолчанию). Итак, «черный» в случае примера в вопросе. (print(matplotlib.rcparams['grid.color'] показывает цвет сетки по умолчанию: '# b0b0b0'). Таким образом, сетка невидима на черных участках графика.

Поэкспериментируйте со стилем линии и / или шириной линии, чтобы сделать сетку менее заметной.

В приведенном ниже коде я изменил изображение до 20x20, чтобы черные квадраты были хорошо отцентрированы и убрали нижние метки. Цвета не обязательно должны быть черно-белыми, хотя сетка будет невидимой только на квадратах того же цвета, что и сетка.

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

m = np.zeros((20, 20))
for i in range(20):
    for j in range(20):
        if 45 <= abs(i-9.5)**2 + abs(j-9.5)**2 <= 65:
            m[i, j] = -0.1

plt.matshow(m, cmap=ListedColormap(['indigo', 'gold']), extent=(0.5, 20.5, 20.5, 0.5))
plt.xticks(range(1, 21))
plt.yticks(range(1, 21))
plt.tick_params(axis='x', bottom=False)
plt.grid(c='indigo', ls=':', lw='0.4')
plt.show()

example plot

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