Я пытаюсь построить матрицу, используя pytlot в python.
import matplotlib.pyplot as plt
m = [
[1, 0, 2, 0, 0],
[1, 1, 1, 2, 0],
[0, 4, 1, 0, 0],
[0, 4, 4, 1, 2],
[1, 3, 0, 0, 1],
]
plt.imshow(m)
plt.show()
Это похоже на то, что мне нужно, но проблема в том, что мне нужно иметь возможность выбирать цвет для позиции.
Например:
позиция 1x2 должна быть красной.
в любом случае заархивировать это с помощью Python и Pyplot?
Если 1x2 красный, хотите ли вы, чтобы все, что имеет значение 1, тоже было красным?
@chrisz да, что-то в этом роде, если это возможно.






Вы можете сопоставить определенный диапазон с определенной цветовой картой, используя аргументы vmin и vmax, а затем назначить эти цвета определенным значениям на вашем графике. Вот простой пример с использованием brg cmap.
Я использовал шкалу от 1 до 10, поэтому 1 будет синим, 5 - красным, 10 - зеленым и т. д.
import matplotlib.pyplot as plt
m = [
[1, 0, 2, 0, 0],
[1, 1, 1, 2, 0],
[0, 4, 1, 0, 0],
[0, 4, 4, 1, 2],
[1, 3, 0, 0, 1]
]
dct = {1: 5., 0: 1., 2: 1., 3: 1., 4: 1.}
n = [[dct[i] for i in j] for j in m]
print(n)
plt.imshow(n, cmap='brg', vmin=1, vmax=10)
plt.show()
Вывод (все единицы в вашей матрице теперь красные, все остальные значения установлены на синий):
Думаю, здесь вам нужен matplotlib.colors.ListedColormap:
import matplotlib
import matplotlib.pyplot as plt
colors = 'lime red blue magenta yellow'.split()
cmap = matplotlib.colors.ListedColormap(colors, name='colors', N=None)
m = [
[1, 0, 2, 0, 0],
[1, 1, 1, 2, 0],
[0, 4, 1, 0, 0],
[0, 4, 4, 1, 2],
[1, 3, 0, 0, 1],
]
plt.imshow(m, cmap=cmap)
plt.show()
Вы также можете использовать кортежи (R, G, B) (вместо стандартных цветовых строк) в своем списке, если вам нужно больше контроля.
Возможно, вы захотите указать, как цвета выбираются для значений, так как это имеет позицию (1,2) как зеленый. Похоже, что это всего лишь простая перестановка вашей цветовой карты в списке.
@chrisz: цвета просто отображаются в порядке: 0 -> красный, 1 -> салатовый и т. д. Таким образом, вам нужно указать один цвет для каждого возможного значения в диапазоне (здесь пять цветов). Это легко сделать для матриц в области целочисленных значений, как здесь. Если ваш домен представляет собой реальные значения, предпочтительнее другие схемы цветовых карт.
Я говорю, что он назначает 0-> красный, когда он хочет, чтобы 1 была красной. Но мне нравится этот ответ, если у вас есть фиксированный домен, это очень просто.
@chrisz: Я отредактировал код (переключив 'красный' и 'лайм' на 0 -> лайм и 1 -> красный. Я не знаю желаемых цветов для других значений ...
Используйте каналы RGB .. например. ваш массив имеет форму
(rows, cols, channel)и устанавливает для каждого канала желаемое значение красного, зеленого и синего цветов. Итак,m[1][2[0] = 255