Python matplotlib изменяет цвет по умолчанию для значений, превышающих диапазон colorbar

при заполнении сетки цветом, например, при использовании contourf в pyplot, мне нужно найти способ изменить цвет, который pyplot использует для заполнения данных, превышающих указанный диапазон цветовой панели. Я хочу иметь статическую цветовую панель, которая автоматически не изменяет свой диапазон, чтобы соответствовать максимуму/мин данных, поэтому наличие случайных экстремальных значений, которые превышают его границы, неизбежно, и для таких значений необходимо указать цвета.

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

enter image description here

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

любая помощь будет оценили.

1 ответов


цвета вне границ могут быть установлены с помощью set_over и set_under методы цветовой карты; см. документация. Эти значения необходимо указать при создании цветовой карты. Однако я не вижу никаких настроек matplotlibrc, чтобы установить для этого значение по умолчанию. Вы также можете спросить в списке рассылки matplotlib.

Edit: я вижу, что происходит. Белую область, которую вы описываете, не выходит за пределы цветового диапазона. Это просто пустой фон осей. Поскольку вы строите только определенные уровни, любые уровни за пределами этого диапазона не будут строиться вообще, оставляя эти области пустыми. Чтобы получить то, что вы хотите, сделайте это:

cs = pyplot.contourf(x,y,z,levels=np.arange(50, 220, 20), cmap=pyplot.cm.jet, extend="both")
cs.cmap.set_under('k')
cs.set_clim(50, 210)
cb = pyplot.colorbar(cs)

аргумент "extend" является ключевым; он говорит contourf идти вперед и строить все контуры, но свернуть все вне данного диапазона в "слишком большие" и "слишком маленькие" категории. The cs.set_clim вызов необходим для работы вокруг странности, которую я обнаружил в contourf при отладке этого; для какая-то причина, когда вы используете extend, он манипулирует данных ограничений, так мы должны сбросить их обратно в то, что мы хотим, чтобы они были.

также, как вопрос стиля, вы не должны делать такие вещи, как Colormap.set_under(cmap,color='k'). Это вызов метода класса и явная передача экземпляра, что является странным способом сделать это. Просто сделай!--6-->.