2014-08-20 5 views
6

Я пытаюсь построить несколько гистограмм на одном и том же сюжете, но я понял, что некоторые цвета присваиваются различным сериям, которые меня немного беспокоят. Есть ли способ заставить цветные полосы быть уникальными?Как выбрать уникальные цвета гистограмм в matplotlib?

Это работает для небольшого набора данных, но когда я использую много данных, я вижу эту проблему возвращаясь

вот пример, синий цвет назначается дважды в двух различных выборок данных

enter image description here

всех примеры и решение приписывать цвета гистограмм в Matplotlib (по крайней мере те, которые я нашел) предлагают нормализовать ось х между 0 и 1, как this example, но это не то, что я хочу иметь, потому что это очень важно иметь реальные ценности в моем случае.

Есть ли другое решение?

Благодаря

EDIT

Одно из решений я пришел с, чтобы преобразовать палитру CMAP в Numpy массив и использовать pyplot Hist цвет, вызвав эту палитру

N = len(list_of_samples) 
sample_colors = cm.get_cmap('RdYlBu', N) 
palette = sample_colors(np.arange(N)) 

но это работает только для гистограммы для функции графика Я получил это сообщение об ошибке

ValueError: to_rgba: Invalid rgba arg "[[ 0.64705884 0.   0.14901961 1.  ] 
[ 0.89187675 0.2907563 0.20000001 1.  ] 
[ 0.98711484 0.64593837 0.36358543 1.  ] 
[ 0.99719888 0.91316527 0.61736696 1.  ] 
[ 0.91316529 0.96638656 0.90868344 1.  ] 
[ 0.63977591 0.82633053 0.90028011 1.  ] 
[ 0.34957983 0.55294117 0.75462185 1.  ] 
[ 0.19215687 0.21176471 0.58431375 1.  ]]" 
only length-1 arrays can be converted to Python scalars 
+1

Вам также нужна функция '' 'plot'''? Можете ли вы привести примерный код, демонстрирующий, как вы хотите запечатлеть, и что должно быть окрашено по-другому? (Возможно [этот пост] (http://stackoverflow.com/a/8931396/3419103) уже то, что вам нужно.) – Falko

+0

Хм это могло бы сделать то, что я действительно ищу, спасибо большое @Falko – Rad

ответ

6

Раствор для гистограмм выглядит следующим образом:

import pylab as pl 

N, bins, patches = pl.hist(pl.rand(1000), 20) 

jet = pl.get_cmap('jet', len(patches)) 

for i in range(len(patches)): 
    patches[i].set_facecolor(jet(i)) 

Результат:

enter image description here

Я надеюсь, что это то, что вы ищете.

+0

, как я сказал в мой вопрос: я не ищу, чтобы изменить (нормализовать) значения оси x от 0 до одного, к сожалению, – Rad

+1

Вам не обязательно. Назначение цветов работает независимо от ваших значений x и y. – Falko

+0

Звучит неплохо, спасибо @Falko – Rad

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