Постройте матрицу на Python с пользовательскими цветами

Я пытаюсь построить матрицу, используя 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?

Используйте каналы RGB .. например. ваш массив имеет форму (rows, cols, channel) и устанавливает для каждого канала желаемое значение красного, зеленого и синего цветов. Итак, m[1][2[0] = 255

Jonathan R 10.04.2018 22:04

Если 1x2 красный, хотите ли вы, чтобы все, что имеет значение 1, тоже было красным?

user3483203 10.04.2018 22:13

@chrisz да, что-то в этом роде, если это возможно.

exsnake 10.04.2018 22:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
3 206
2

Ответы 2

Вы можете сопоставить определенный диапазон с определенной цветовой картой, используя аргументы 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) как зеленый. Похоже, что это всего лишь простая перестановка вашей цветовой карты в списке.

user3483203 10.04.2018 22:43

@chrisz: цвета просто отображаются в порядке: 0 -> красный, 1 -> салатовый и т. д. Таким образом, вам нужно указать один цвет для каждого возможного значения в диапазоне (здесь пять цветов). Это легко сделать для матриц в области целочисленных значений, как здесь. Если ваш домен представляет собой реальные значения, предпочтительнее другие схемы цветовых карт.

sciroccorics 10.04.2018 22:49

Я говорю, что он назначает 0-> красный, когда он хочет, чтобы 1 была красной. Но мне нравится этот ответ, если у вас есть фиксированный домен, это очень просто.

user3483203 10.04.2018 22:50

@chrisz: Я отредактировал код (переключив 'красный' и 'лайм' на 0 -> лайм и 1 -> красный. Я не знаю желаемых цветов для других значений ...

sciroccorics 10.04.2018 22:53

Другие вопросы по теме