ColorMap игнорируется для графика Matplotlib contourf с пользовательскими уровнями
-
26-10-2019 - |
Вопрос
Я пытаюсь создать заполненный контурный сюжет в Matplotlib (Win7, 1.1.0). Я хочу выделить определенные значения, и уровни ближе к журналу, чем линейные.
Есть многочисленные коллеги, которые мне подойдут, но мой выбор CMAP игнорируется.
Мне нужно создать пользовательскую «нормализовать»? Если да, то каждый контур раскрашивается в соответствии с его краем, а затем заполнен тем же цветом до следующего более низкого значения? Почему симптом этого игнорировать мою цветную карту ... это какое -то исключение во время строительства, которое поймается, и моя просьба молча игнорируется?
Мои исходные данные имели отсутствующие значения. Я играл с тем, чтобы сделать это NAN, большую и маленькую ... в каждом случае я пробовал их маскировать и не маскировать ценности «наружные». Я также попробовал все перестановки, используя уровни по умолчанию и норму.
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)
Я надеюсь, что этого фрагмента достаточно, чтобы хотя бы начать разговор.
Спасибо, Эли
Решение
Если я правильно понял, вам необходимо перенести свои данные в цвета, используя ваши уровни в качестве основы, а не линейного масштабирования по умолчанию. Если это правильно, то вам нужно использовать 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()
Это дает
Сравните это с дефолтом Normalize
поведение:
Надеюсь, это поможет.