Цветовая карта игнорируется для контурного графика matplotlib с пользовательскими уровнями - PullRequest
2 голосов
/ 17 февраля 2012

Я пытаюсь создать заполненный контурный график в matplotlib (Win7, 1.1.0). Я хочу выделить определенные значения, и уровни ближе к логарифму, чем к линейному.

Существует множество цветовых карт, которые мне подходят, но мой выбор cmap игнорируется.

Нужно ли создавать кастом "нормализовать"? Если так, то каждый контур окрашен в соответствии со значением ребра, а затем заполнен тем же цветом до следующего более низкого значения? Почему симптомом этого является игнорирование моей цветовой карты ... это какое-то исключение во время перехвата конструкции, и мой запрос игнорируется?

В моих исходных данных отсутствовали значения. Я играл с этим, большим и маленьким ... в каждом случае я пытался маскировать их, а не маскировать "внешние" значения. Я также попробовал все перестановки, используя уровни и норму по умолчанию.

lev = [0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]
norml = colors.normalize(0,32)
cs = plt.contourf(x,z,data,cmap=cm.gray, levels=lev, norm = norml)

Надеюсь, этого фрагмента достаточно, чтобы хотя бы начать разговор.

Спасибо, Eli

1 Ответ

5 голосов
/ 17 февраля 2012

Если я вас правильно понял, вам нужно изменить масштаб ваших данных до цветов, используя ваши уровни в качестве основы, а не линейное масштабирование по умолчанию.Если это так, тогда вам нужно использовать colors.BoundaryNorm в качестве коэффициента нормы.Рассмотрим следующий пример:

x = np.arange(0,8,0.1)
y = np.arange(0,8,0.1)
z = (x[:,None]-4) ** 2 + (y[None,:]-4) ** 2

lev = [0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]
norml = colors.BoundaryNorm(lev, 256)
cs = plt.contourf(x, y, z, cmap = cm.jet, levels = lev, norm = norml)
plt.show()

Это дает

enter image description here

Сравните его с поведением по умолчанию Normalize:

enter image description here

Надеюсь, это поможет.

...