Python Matplotlib изменить цвет по умолчанию для значений, превышающих диапазон цветовой шкалы
При заполнении сетки цветом, например при использовании contourf в pyplot, мне нужно найти способ изменить цвет, используемый pyplot для заполнения данных, которые превышают указанный диапазон цветовой шкалы. Мне бы хотелось иметь статическую цветовую панель, которая не меняет свой диапазон автоматически, чтобы соответствовать максимальному / минимальному количеству данных, поэтому случайные экстремальные значения, превышающие ее границы, неизбежны, и для таких значений необходимо указывать цвета.
Цвет по умолчанию для значений, выходящих за границы цветовой шкалы, - белый, который может резко конфликтовать с окружающими данными, если цветовая карта не имеет белого в качестве конечных цветов. Пример изображения показан ниже - обратите внимание на белую заливку, когда значения превышают отрицательный диапазон цветовой шкалы:
Я считаю, что есть способ указать, какой цвет использовать для каждой границы, если они превышены, с помощью rcParams, но я не смог найти информацию об этом где-либо.
Любая помощь будет оценена.
1 ответ
Цвета за пределами игрового поля могут быть установлены с помощью set_over
а также set_under
методы цветовой карты; см. документацию Вам нужно будет указать эти значения при создании цветовой карты. Я не вижу никакой установки matplotlibrc, чтобы установить значение по умолчанию для этого, хотя. Вы также можете спросить в списке рассылки matplotlib.
Редактировать: я вижу, что происходит. Белая область, которую вы описываете, не выходит за пределы цветового диапазона. Это просто пустой фон осей. Поскольку вы строите только определенные уровни, любые уровни за пределами этого диапазона не будут отображаться вообще, оставляя эти области пустыми. Чтобы получить то, что вы хотите, сделайте это:
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" является ключом; он говорит контуру идти вперед и строить все контуры, но разбить все вне заданного диапазона на "слишком большие" и "слишком маленькие" категории. cs.set_clim
вызов необходим, чтобы обойти странность, которую я обнаружил в contourf при отладке этого; по какой-то причине, когда вы используете extend
, он манипулирует пределами данных, поэтому нам нужно вернуть их обратно к тому, что мы хотим, чтобы они были.
Кроме того, как стиль, вы не должны делать такие вещи, как Colormap.set_under(cmap,color='k')
, Это вызов метода класса и явная передача экземпляра, что является странным способом сделать это. Просто делать cmap.set_under(color="k")
,