Matploblib: рисовать ячейки матрицы на основе индексов, хранящихся в массиве - PullRequest
0 голосов
/ 10 декабря 2018

Я построил матрицу с Numpy и установил значения для ячеек матрицы и нанес ее на Matplotlib в приведенном ниже коде

import numpy as np
import matplotlib.pyplot as plt


matrix = np.loadtxt('C:\folder/matrix_values.txt', usecols=range(20))  
matrix = np.int8(matriz)


fig1, ax1 = plt.subplots()

ax1.matshow(matrix, origin='upper', alpha=0, cmap=None, interpolation='nearest')

for i in xrange(20):
    for j in xrange(20):
        value = matrix[j,i]
        ax1.text(i, j, str(value), va='center', ha='center')


tick_labels = range(20)
ax1.set_xticks([], minor=False)
ax1.set_xticks(np.arange(-.5, 20, 1), minor=True)
ax1.set_yticks([], minor=False)
ax1.set_yticks(np.arange(-.5, 20, 1), minor=True)
ax1.set_xticklabels([], minor=False)
ax1.set_xticklabels(tick_labels, minor=True)
ax1.set_yticklabels([], minor=False)
ax1.set_yticklabels(tick_labels, minor=True)
ax1.xaxis.set_ticks_position('bottom')
ax1.grid(which='minor', color='grey', linestyle='-', linewidth=1)

plt.show()

Результат:

enter image description here

Теперь у меня есть массив с некоторыми координатами ячеек матрицы, например [[0,1], [0,0], [0,2] ...].Этот массив генерируется случайным образом, каждый раз, когда я запускаю код, например, в массиве располагаются координаты 12 ячеек, в другое время это может быть 17 и т. Д. Это матрица 20x20 с 400 ячейками.Как можно закрасить фон ячеек, указанных в массиве координат?

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете сначала создать массив той же формы, что и исходная матрица, и заполнить его нулями.Затем в позициях, определенных массивом координат, поместите их в этот массив.Наконец, построите этот массив вместо исходной матрицы.

import numpy as np
import matplotlib.pyplot as plt


matrix = np.random.randint(0,9, size=(10,10))
highlight = np.array([[1,3],[4,2],[6,8],[7,2]])

hm = np.zeros_like(matrix)
hm[highlight[:,1],highlight[:,0]] = 1

fig, ax = plt.subplots()

ax.matshow(hm, origin='upper', alpha=1, vmin=0, vmax=2, cmap="Blues")

for i in range(matrix.shape[1]):
    for j in range(matrix.shape[1]):
        ax.text(i, j, str(matrix[j,i]), va='center', ha='center')

n = min(matrix.shape)+1
tick_labels = range(n)
ax.set_xticks([], minor=False)
ax.set_xticks(np.arange(-.5, n-1, 1), minor=True)
ax.set_yticks([], minor=False)
ax.set_yticks(np.arange(-.5, n-1, 1), minor=True)
ax.set_xticklabels([], minor=False)
ax.set_xticklabels(tick_labels, minor=True)
ax.set_yticklabels([], minor=False)
ax.set_yticklabels(tick_labels, minor=True)
ax.xaxis.set_ticks_position('bottom')
ax.grid(which='minor', color='grey', linestyle='-', linewidth=1)

plt.show()

enter image description here

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