Я хотел бы знать, как просто изменить порядок цветов данной карты цветов, чтобы использовать ее с plot_surface.
python
matplotlib
Мермос
источник
источник
В matplotlib карта цветов не является списком, но содержит список своих цветов как
colormap.colors
. И модульmatplotlib.colors
предоставляет функциюListedColormap()
для создания цветовой карты из списка. Таким образом, вы можете повернуть любую цветовую карту, выполнивисточник
ListedColormap
s (то есть дискретный, а не интерполированный) имеетcolors
атрибут. РеверсLinearSegmentedColormaps
немного сложнее. (Вам нужно перевернуть каждый пункт в_segmentdata
диктанте.)LinearSegmentedColormaps
, я просто сделал это для некоторых цветовых карт. Вот записная книжка IPython об этом.Решение довольно простое. Предположим, вы хотите использовать цветовую схему «осень». Стандартная версия:
Чтобы изменить цветовую гамму цветовой карты, используйте функцию get_cmap () и добавьте '_r' к заголовку цветовой карты следующим образом:
источник
Поскольку
LinearSegmentedColormaps
словарь основан на словаре красного, зеленого и синего, необходимо поменять местами каждый элемент:Посмотрите, что это работает:
РЕДАКТИРОВАТЬ
Я не получаю комментарий пользователя 3445587. Он отлично работает на карте цветов радуги:
Но это особенно хорошо работает для пользовательских объявленных цветовых карт, так как для пользовательских объявленных цветовых карт нет значения
_r
по умолчанию . Следующий пример взят из http://matplotlib.org/examples/pylab_examples/custom_cmap.html :источник
Начиная с Matplotlib 2.0, есть
reversed()
метод дляListedColormap
иLinearSegmentedColorMap
объектов, так что вы можете просто сделатьcmap_reversed = cmap.reversed()
Вот документация.
источник
Существует два типа LinearSegmentedColormaps. В некоторых _segmentdata дается явно, например, для jet:
Для радуги _segmentdata задается следующим образом:
Мы можем найти функции в источнике matplotlib, где они заданы как
Все, что вы хотите, уже сделано в matplotlib, просто вызовите cm.revcmap, который переворачивает оба типа сегмента данных, поэтому
должен сделать работу - вы можете просто создать новую LinearSegmentData из этого. В revcmap реверсирование на основе функций SegmentData выполняется с
в то время как другие списки, как обычно, меняются местами
Так что на самом деле все, что вы хотите, это
источник
Нет встроенного способа (пока) реверсирования произвольных цветовых карт, но одно простое решение состоит в том, чтобы на самом деле не модифицировать цветную полосу, а создать инвертирующий объект Normalize:
Затем вы можете использовать это с
plot_surface
другими функциями построения графиков Matplotlib, выполнив, например,Это будет работать с любой картой цветов Matplotlib.
источник