Python-построение цветной сетки на основе значений
Я искал здесь и в сети. Я нашел как-то близкие вопросы/ответы на то, что я хочу, но все еще не мог добраться до того, что я ищу.
У меня есть массив, например, 100 значений. Значения находятся в диапазоне от 0 до 100. Я хочу построить этот массив как сетку, заполняя квадраты в соответствии со значениями в массиве.
решения, которые я нашел до сих пор, похожи на следующие:
рисунок сетки в библиотек matplotlib
и
пользовательский сюжет matplotlib: шахматная доска, как таблица с цветными ячейками
в примерах, которые я упомянул, диапазоны цветов различаются и не фиксируются.
однако мне интересно, могу ли я установить диапазоны для определенных значений и цветов. Например, если значения находятся между 10 и 20, пусть цвет квадрата сетки будет красным. еще если значения между 20 и 30, пусть цвет синий. так далее.
Как это может быть достигнуто в python?
2 ответов
вы можете создать ListedColormap для ваших пользовательских цветов и цвета BoundaryNorms до порогового значения.
import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np
data = np.random.rand(10, 10) * 20
# create discrete colormap
cmap = colors.ListedColormap(['red', 'blue'])
bounds = [0,10,20]
norm = colors.BoundaryNorm(bounds, cmap.N)
fig, ax = plt.subplots()
ax.imshow(data, cmap=cmap, norm=norm)
# draw gridlines
ax.grid(which='major', axis='both', linestyle='-', color='k', linewidth=2)
ax.set_xticks(np.arange(-.5, 10, 1));
ax.set_yticks(np.arange(-.5, 10, 1));
plt.show()
для больше, вы можете проверить это примере библиотек matplotlib.
Это зависит от того, в каких единицах вам нужны ваши цвета, но просто простой оператор if должен сделать трюк.
def find_colour(_val):
# Colour value constants
_colours = {"blue": [0.0, 0.0, 1.0],
"green": [0.0, 1.0, 0.00],
"yellow": [1.0, 1.0, 0.0],
"red": [1.0, 0.0, 0.0]}
# Map the value to a colour
_colour = [0, 0, 0]
if _val > 30:
_colour = _colours["red"]
elif _val > 20:
_colour = _colours["blue"]
elif _val > 10:
_colour = _colours["green"]
elif _val > 0:
_colour = _colours["yellow"]
return tuple(_colour)
и просто преобразуйте этот кортеж в любые единицы, которые вам нужны, например RGBA(..). Затем вы можете реализовать методы, которые, похоже, вы уже нашли для достижения сетки.