2016-05-23 2 views
1

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

Пусть рассмотрим изображение ниже:

Color map example

Моя цель просто изменить предельные цвета карты, например в этом случае цветовая карта переходит от темно-красного к синему, скажем, мне хотелось бы, чтобы она переходила от темно-зеленого до синего. В частности, я бы пошел от цветов #244162 до #DCE6F1 (тональности синего) таким же непрерывным способом, как в приведенном выше примере.

Как это можно сделать?


[EDIT]

Я попытался следующий код:

import matplotlib.pyplot as plt 
import matplotlib.colors as clr 

some_matrix = ... 
cmap = clr.LinearSegmentedColormap('custom blue', ['#244162','#DCE6F1'], N=256) 
plt.matshow(some_matrix, cmap=cmap) 

Но я получаю сообщение об ошибке TypeError: list indices must be integers, not unicode.

+0

Другие, чем «читать некоторые вопросы ", вы что-то пробовали? Например, вы искали существующий набор цветов, который бы работал или пытался «LinearSegmentedColormap»? – tom10

+0

Вот некоторые конкретные примеры в документации 'matplotlib'. http://matplotlib.org/examples/color/colormaps_reference.html –

+0

Я пробовал некоторые существующие цветовые карты, но я бы хотел определить пользовательский, чтобы поддерживать равномерное форматирование по всему документу. Я попытался реализовать 'LinearSegmentedColormap' с помощью этого кода' cmap = matplotlib.colors.LinearSegmentedColormap ('custom blue', ['# 244162', '# DCE6F1'], N = 256), но он не сработал. –

ответ

4

LinearSegmentedColormap не принимает список цветов, он принимает следующий аргумент:

словарь с красным, зеленым и синим записи. Каждая запись должна быть списком кортежей x, y0, y1, образующих строки в таблице. Записи для альфа являются необязательными.

Таким образом, вам необходимо либо определить словарь, как описано выше, или в вашем случае, я думаю, вы просто хотите использовать LinearSegmentedColormap.from_list() метод:

import matplotlib.pyplot as plt 
import matplotlib.colors as clr 
import numpy as np 

some_matrix = np.random.rand(10,10) 

cmap = clr.LinearSegmentedColormap.from_list('custom blue', ['#244162','#DCE6F1'], N=256) 

plt.matshow(some_matrix, cmap=cmap) 

plt.show() 

enter image description here

+0

А гениальный! Это именно то, чего я хотел, мне не хватало '.from_list', спасибо! –

Смежные вопросы