Почему часть моего контурного графика отображается белым цветом?

Я использую Python matplotlib.pyplot.contourf для создания контурного графика моих данных с цветной полосой. Я делал это успешно бесчисленное количество раз, даже с другими слоями той же переменной. Однако, когда значения становятся маленькими (порядка 1E-12), части контура становятся белыми. Белый цвет также не отображается на цветовой шкале. Кто-нибудь знает, что вызывает это и как это исправить? Неисправный контур прикреплен ниже.

Плохой контур

a1 = plt.contourf(np.linspace(1,24,24),np.linspace(1,20,20),np.transpose(data[:,:,15]))
plt.colorbar(a1)
plt.show()

person WVJoe    schedule 30.04.2020    source источник
comment
Вы проверили, какие значения представлены белым цветом?   -  person SergioR    schedule 30.04.2020
comment
Кроме того, что вы рисуете код?   -  person SergioR    schedule 30.04.2020
comment
Возможно, вы захотите проверить и убедиться, что в ваших данных нет nan.   -  person William Miller    schedule 30.04.2020
comment
В данных нет нанов, а значения, выделенные белым цветом, лишь немного превышают верхний край цветной полосы. Кроме того, я обновил сообщение, включив в него код построения.   -  person WVJoe    schedule 30.04.2020
comment
Попробуйте с plt.contourf(..., extend="max").   -  person SergioR    schedule 30.04.2020
comment
Это заставило белый исчезнуть, он просто показывает расширение для всего, что больше, чем верхний конец цветовой полосы, что действительно решает мою проблему. Можете ли вы поместить это в ответ, чтобы я мог закрыть его, чтобы другие люди могли увидеть решение в будущем?   -  person WVJoe    schedule 01.05.2020
comment
Я пишу это. На всякий случай он будет включать другие случаи.   -  person SergioR    schedule 01.05.2020


Ответы (2)


tl;dr

Учитывая новую информацию, matplotlib не смог установить правильное количество уровней (см. параметры в документации) для ваших данных, оставляя данные незавершенными. Чтобы исправить это, вам нужно указать matplotlib расширить пределы с помощью plt.contourf(..., extend="max") или plt.contourf(..., extend="both").

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

Развернутый ответ

Есть несколько причин, по которым contourf() показывает белые зоны с цветовой картой, которая не включает белый цвет.

значения NaN

Значения NaN никогда не отображаются на графике.

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

Маскированные данные

Если вы маскируете данные перед построением графика, они не будут отображаться на графике. Но вы должны знать, замаскировали ли вы свои данные.

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

Хотя вы можете незаметно замаскировать свои данные, если используете что-то вроде Tick locator = Логлокатор().

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

Matplotlib не может установить правильные уровни для ваших данных

Иногда matplotlib не устанавливает правильные уровни, оставляя некоторые ваши данные без построения графика.

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

Чтобы исправить это, вы можете использовать plt.contourf(..., extend=EXTENDS), где EXTENDS может быть "neither", "both", "min", "max".

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

Грубая сетка

контур отображает пробелы по конечным данным. Прошлые ответы неверны

person SergioR    schedule 01.05.2020

Одно замечание: белый участок на графике также может появиться, если точки данных векторов X и Y не расположены на одинаковом расстоянии друг от друга. В этом случае лучше всего использовать функцию tricontour().

person jto    schedule 30.11.2020
comment
Я думаю, что это должно быть в разделе комментариев. - person Dorian Turba; 30.11.2020