pyplot.contourf() возвращает ошибку при указанном аргументе уровней

EDIT: проблема, скорее всего, связана с версией. Аргумент levels принимает целочисленный аргумент в версии 3.0.0, тогда как эта проблема возникла при использовании версии 2.2.2.

ОБНОВЛЕНИЕ: проблема не возникала после установки версии >=3.0.0.

Я пытаюсь сделать контурный график в Python, используя функцию matplotlib.pyplot.contourf(), и он отлично работает следующим образом:

plt.contourf(x, y, z)

но когда я пытаюсь указать целое число для аргумента уровней, например:

plt.contourf(x, y, z, levels=100)

он всегда возвращает ошибку: TypeError: len() of unsized object

В документации сказано, что аргумент levels может быть либо int, либо array_like, поэтому я не знаю, почему он вообще вызывает функцию len()

Любые идеи, почему это происходит, и любые предложения о том, как это исправить?


person s-jevtic    schedule 10.11.2018    source источник


Ответы (1)


Извините, это случается с вами. Документация изменилась в версии 2.2.3, но эта функция не была полностью реализована. Поэтому в зависимости от версии matplotlib аргумент levels интерпретируется по-разному.

matplotlib ‹ 3.0.0

levels интерпретируется как список уровней, на которых нужно рисовать контуры. Целое число интерпретируется как один уровень. Для графика contourf (заполненный контур) вам потребуется как минимум два уровня. Используйте ранее известный способ указать количество уровней в качестве второго или четвертого безымянного аргумента.

plt.contourf(z, 100)
plt.contourf(x, y, z, 100)

matplotlib >= 3.0.0

levels может принимать как список, так и целое число. Целое число означает (приблизительное [*]) количество уровней. Соответствующий PR — это это.

plt.contourf(z, levels=100)
plt.contourf(x, y, z, levels=100)
person ImportanceOfBeingErnest    schedule 10.11.2018
comment
Так быть не должно, но возможно у меня версия старше 3.0.0. - person s-jevtic; 16.11.2018
comment
Я проверил. Это действительно проблема (у меня была версия 2.2.2). - person s-jevtic; 16.11.2018