Как создать цветовой градиент в Python?
Я хочу создать новую цветовую карту, которая интерполирует между зеленым и синим (или любые другие два цвета в этом отношении). Моя цель - получить что-то вроде:
Прежде всего, я действительно не уверен, что это можно сделать с помощью линейной интерполяции синего и зеленого. Если это возможно, я не уверен, как это сделать, я нашел некоторую документацию по использованию метода 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-пространстве ...