it-roy-ru.com

Python - построение цветной сетки на основе значений

Я искал здесь и в сети. Я нашел как-то близкие вопросы/ответы на то, что я хочу, но все еще не мог достичь того, что я ищу.

У меня есть массив, например, 100 значений. Значения находятся в диапазоне от 0 до 100 ... Я хочу построить этот массив в виде сетки, заполняя квадраты в соответствии со значениями в массиве. 

Решения, которые я нашел до сих пор, похожи на следующие: 

Рисование сетки в matplotlib

а также

пользовательский сюжет matplotlib: шахматная доска, как стол с цветными ячейками

В упомянутых мной примерах диапазоны цветов варьируются и не являются фиксированными.

Однако меня интересует, могу ли я установить диапазоны для определенных значений и цветов . Например, Если значения находятся в диапазоне от 10 до 20, пусть цвет квадрата сетки будет красным . еще, если значения между 20 и 30, позвольте цвету быть синим. и т.п.

Как это может быть достигнуто в Python? 

9
philippos

Вы можете создать 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()

В результате чего;  Plot with BoundaryNorms

Более подробно вы можете проверить в этом примере matplotlib .

11
umutto

Это зависит от того, в каких единицах измерения вам нужны ваши цвета, но простое выражение 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 (..). Затем вы можете реализовать методы, которые выглядят так, как будто вы уже нашли, для достижения сетки.

0
Jordan Gleeson