
Прежде всего, я действительно не уверен, можно ли это сделать с помощью линейной интерполяции синего и зеленого цветов. Если и возможно, то я не знаю, как это сделать. Я нашел документацию по использованию метода 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)]}