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

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

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

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

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

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

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

4b9b3361

Ответ 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" - это ключ; он говорит contourf идти вперед и строить все контуры, но сворачивать все за пределами данного диапазона в "слишком большие" и "слишком маленькие" категории. Вызов cs.set_clim необходим, чтобы обойти некоторую странность, обнаруженную мной во время отладки; по какой-то причине, когда вы используете extend, он управляет лимитами данных, поэтому нам нужно reset вернуть их к тому, кем мы хотим.

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