Как добавить цветную полосу на гистограмму?

У меня есть такая гистограмма (как обычная гистограмма): введите здесь описание изображения

В моей ситуации всегда есть 20 полос (охватывающих ось x от 0 до 1), а цвет полосы определяется на основе значения на оси x.

Что я хочу, так это добавить цветовой спектр, подобный одному из тех, что приведены в http://wiki.scipy.org/Cookbook/Matplotlib/Show_colormaps внизу гистограммы, но я не знаю, как его добавить.

Любая помощь будет оценена по достоинству!


person TYZ    schedule 03.06.2015    source источник
comment
Вы можете добавить еще один сюжет. Ответы в этом сообщении SO помогут.   -  person NullDev    schedule 03.06.2015
comment
Пожалуйста, покажите код, который вы используете для создания графика. Это поможет нам адаптировать ответ к вашему варианту использования.   -  person leekaiinthesky    schedule 03.06.2015


Ответы (1)


Вам нужно указать цвет граней из какой-либо формы цветовой карты, например, если вы хотите 20 ячеек и цветовую карту spectral,

nbins = 20
colors = plt.cm.spectral(np.linspace(nbins))

Затем вы можете использовать это, чтобы указать цвет столбцов, что, вероятно, проще всего сделать, сначала получив данные гистограммы (используя numpy) и построив гистограмму. Затем вы можете добавить цветную полосу на отдельную ось внизу.

В качестве минимального примера,

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

nbins = 20
minbin = 0.
maxbin = 1.

data = np.random.normal(size=10000)
bins = np.linspace(minbin,maxbin,20)

cmap = plt.cm.spectral
norm = mpl.colors.Normalize(vmin=data.min(), vmax=data.max())
colors = cmap(bins)

hist, bin_edges = np.histogram(data, bins)

fig = plt.figure()
ax = fig.add_axes([0.05, 0.2, 0.9, 0.7])
ax1 = fig.add_axes([0.05, 0.05, 0.9, 0.1])

cb1 = mpl.colorbar.ColorbarBase(ax1, cmap=cmap,
                                norm=norm,
                                orientation='horizontal')

ax.bar(bin_edges[:-1], hist, width=0.051, color=colors, alpha=0.8)
ax.set_xlim((0., 1.))
plt.show()

Что дает, введите здесь описание изображения

person Ed Smith    schedule 03.06.2015
comment
Это именно то, что я хотел! Спасибо. Я попытаюсь применить это к нескольким сюжетным линиям. - person TYZ; 03.06.2015
comment
Я понимаю, что могу перебирать палитру, чтобы размещать разные цвета по разным значениям x. Если кто-то хочет, чтобы цветовая карта совпадала со значениями y, есть ли более простой способ, чем использование обратных функций? - person ; 26.04.2017