Как я могу создать цветовой градиент в Python?Python

Программы на Python
Anonymous
Как я могу создать цветовой градиент в Python?

Сообщение Anonymous »

Я хочу создать новую цветовую карту, которая интерполирует между зеленым и синим (или любыми другими двумя цветами, если на то пошло). Моя цель - получить что-то вроде:
Изображение

Прежде всего, я действительно не уверен, можно ли это сделать с помощью линейной интерполяции синего и зеленого цветов. Если и возможно, то я не знаю, как это сделать. Я нашел документацию по использованию метода Matplotlib, который интерполирует указанные значения RGB.
Настоящая проблема заключается в понимании того, как работает «cdict2» ниже. Например, в документации сказано:

Пример: предположим, вы хотите, чтобы красный цвет увеличился с 0 до 1 в нижней половине, зеленый — в средней половине и синий — в верхней половине. Тогда вам следует использовать:

Код: Выделить всё

from matplotlib import pyplot as plt
import matplotlib
import numpy as np

plt.figure()
a = np.outer(np.arange(0, 1, 0.01), np.ones(10))
cdict2 = {'red':   [(0.0,  0.0, 0.0),
(0.5,  1.0, 1.0),
(1.0,  1.0, 1.0)],
'green': [(0.0,  0.0, 0.0),
(0.25, 0.0, 0.0),
(0.75, 1.0, 1.0),
(1.0,  1.0, 1.0)],
'blue':  [(0.0,  0.0, 0.0),
(0.5,  0.0, 0.0),
(1.0,  1.0, 1.0)]}
my_cmap2 = matplotlib.colors.LinearSegmentedColormap('my_colormap2', cdict2, 256)
plt.imshow(a, aspect='auto', cmap=my_cmap2)
plt.show()
Теперь я понимаю, как работает интерполяция. Например, это даст интерполяцию от красного к белому:
От белого к красному: спускаясь вниз по столбцам «матрицы» для каждого цвета, в первом столбце мы имеем координату X того места, где мы хотим, чтобы интерполяция начиналась и заканчивалась, а два других столбца — это фактические значения значения цвета в этой координате.

Код: Выделить всё

cdict2 = {'red':   [(0.0,  1.0, 1.0),
(1.0,  1.0, 1.0),
(1.0,  1.0, 1.0)],
'green': [(0.0,  1.0, 1.0),
(1.0,  0.0, 0.0),
(1.0,  0.0, 0.0)],
'blue':  [(0.0,  1.0, 1.0),
(1.0,  0.0, 0.0),
(1.0,  0.0, 0.0)]}
Очевидно, что нужный мне градиент будет очень сложно создать путем интерполяции в пространстве RGB...

Вернуться в «Python»