Ручная цветовая карта Python matplotlib

У меня есть 2-мерные поля для построения в python с использованием базовой карты matplotlib. Значения полей варьируются от 0 до более чем 1000. Можно ли вручную создать карту цветов с фиксированными градациями и цветами? Это должно выглядеть так:

для значений - установить цвет

  • 0 - 1 - белый
  • 1 - 5 - темно-зеленый
  • 5 - 10 - салатовый
  • 10 - 25 - желтый
  • 25 - 50 - коричневый
  • 50 - 100 - оранжевый
  • 100 - 500 - светло-красный
  • 500 - 1000 - темно-красный
  • > 1000 - фиолетовый

Я новичок в питоне. Итак, любые предложения приветствуются.


person Alexander Kurganskiy    schedule 26.08.2014    source источник
comment
Я не упомянул, что данные были в файлах grib и имели правильные координаты долготы и широты. Итак, мне нужно нарисовать их с помощью ручной цветной полосы (как я указал выше) на карте долгота-широта.   -  person Alexander Kurganskiy    schedule 26.08.2014


Ответы (1)


Это именно то, что вам нужно.

Однако способ ввода немного сбивает с толку, поэтому это может быть более полезным.

Однако, чтобы получить бит больше 1000, вам нужно замаскировать значения выше 1000, а остальную часть шкалы изменить от 0 до 1000.

from matplotlib.colors import LinearSegmentedColormap
cMap = []
for value, colour in zip([0,1,5,10,25,50,100,500,1000],["White", "DarkGreen", "LightGreen", "Yellow", "Brown", "Orange", "IndianRed", "DarkRed", "Purple"]):
    cMap.append((value/1000.0, colour))

customColourMap = LinearSegmentedColormap.from_list("custom", cMap)

Это все, что вам нужно для создания собственной палитры. Чтобы использовать его, просто передайте его в функцию построения графика (какую бы вы ни использовали) в качестве именованного аргумента cmap

Вот как это выглядит.введите здесь описание изображения

person will    schedule 26.08.2014
comment
Какая-то конкретная причина для отрицательного голосования? Это указывает на точную часть документации, которая содержит именно то, что задает вопрос... - person will; 26.08.2014
comment
Кто-то указал пальцем не на ту стрелку - я считаю это хорошим ответом (+1) с большим количеством информации. - person DrV; 26.08.2014
comment
Я не упомянул, что данные были в файлах grib и имели правильные координаты долготы и широты. Итак, мне нужно нарисовать их с помощью ручной цветной полосы (как я указал выше) на карте долготы и широты. - person Alexander Kurganskiy; 26.08.2014
comment
Что ты имеешь в виду? Как только вы укажете цветовую полосу, она нормализует данные, а цвета изменятся от 0 до 1. Если вы хотите, чтобы он был ограничен 1000 и сделал все выше этого фиолетовым, то вы можете либо отредактировать данные, которые вы рисуете (ИМХО, плохая идея, поскольку вы скрываете информацию), либо вы можете замаскировать данные выше 1000 и сделать маскированные данные фиолетового цвета. Вы можете замаскировать его массивами с масками numpy. Формат данных не имеет значения для этого процесса, аргумент ключевого слова cmap просто продолжает подниматься вверх по иерархии классов, пока не наткнется на то, что этого хочет (я думаю, artist). - person will; 27.08.2014
comment
@AlexanderKurganskiy Неважно, какой у тебя сюжет. Когда у вас есть рабочий 2D-график данных, которые вы хотите отобразить, вам нужно только передать ColorMap аргументу ключевого слова cmap любой функции построения графика, которую вы используете. - person will; 27.08.2014