Получить цвета сегментов из уже построенной последовательной шкалы цветов в matplotlib - PullRequest
2 голосов
/ 25 мая 2020

Мне нужно создать новую шкалу цвета с branca на основе уже нанесенной шкалы цвета в matplotlib.

У меня есть объект следующего типа:

<matplotlib.colorbar.Colorbar object at 0x7f089252e790>

Это происходит из классической c цветной полосы в matplotlib, например:

cbar = plt.colorbar(filled_contours, extend=extend, cax=cax)

Определенные атрибуты могут быть найдены при воспроизведении в консоли (встроенный код VS):

In: cbar.values
Out: array([0.00099944, 0.00205833, 0.00311722, 0.00417611, 0.005235  ,
       0.00629389, 0.00735278, 0.00841167, 0.00947056])

In: cbar._y
Out: array([0.        , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
       0.55555556, 0.66666667, 0.77777778, 0.88888889, 1.        ])

In: cbar.cmap.name
Out: 'Reds'

In: cbar.cmap
Out: <matplotlib.colors.LinearSegmentedColormap object at 0x7f08b1d91910>

Я не мог понять, где извлечь цвета, используемые в каждом сегменте уже построенной панели cbar.

В качестве обходного пути я придумал следующий фрагмент кода, хотя я не абсолютно уверен, что это точно те же цвета, что я вижу на графике:

import matplotlib.pyplot as plt
extracted_cmap = plt.cm.get_cmap(cbar.cmap.name)
extracted_colors = [extracted_cmap(v) for v in cbar._y]

print(extracted_colors) доставляет используемые цвета (как я полагаю):

[(1.0, 0.9607843137254902, 0.9411764705882353, 1.0), (0.996555171088043, 0.8884429065743944, 0.8378316032295271, 1.0), (0.9901422529796232, 0.7686120722798924, 0.6780930411380238, 1.0), (0.9882352941176471, 0.6261437908496732, 0.5084967320261438, 1.0), (0.9860976547481738, 0.48704344482891193, 0.3615532487504806, 1.0), (0.9629065743944636, 0.331841599384852, 0.23667820069204154, 1.0), (0.8901960784313725, 0.18562091503267975, 0.15294117647058825, 1.0), (0.7598462129950019, 0.0855363321799308, 0.10609765474817377, 1.0), (0.6175009611687813, 0.05167243367935409, 0.07853902345251824, 1.0), (0.403921568627451, 0.0, 0.05098039215686274, 1.0)]

При окончательном создании colorbar через branca на основе вышеупомянутого обходного пути кажется, что отображаются правильные цвета.

Тем не менее, я считаю, что должна быть возможность извлекать их непосредственно из объекта cbar вместо того, чтобы восстанавливать их самостоятельно. Думаю, я просто не нашел правильный подпод-... атрибут matplotlib.colorbar.Colorbar object.

...