Ограничительная метка на контурном участке

1

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

import matplotlib.pyplot as plt
import numpy as np

def f(x1, x2):
    return (x2 - x1)**4 + 8 * x2 * x1 - x1 + x2 + 3

x1 = np.linspace(-2,2,1000)
x2 = np.linspace(-2,2,1000)

X1, X2 = np.meshgrid(x1, x2)
F = f(X1, X2)
F = np.clip(F, a_min=None, a_max=50)

contours = plt.contour(X1, X2, F, 50, cmap="rainbow")
print(contours.levels)
plt.clabel(contours, contours.levels[0:8], inline=True, fontsize=10, fmt="f = %1.1f", use_clabeltext=True)

plt.title('Q3a Solution')
plt.xlabel('x1')
plt.ylabel('x2')


plt.show()

Код работает при запуске в matplotlib версии 2.1.2, однако запуск того же кода в версии 3.0.0 приводит к следующей ошибке:

Traceback (most recent call last):
  File "Tutorial1.py", line 16, in <module>
    plt.clabel(contours, contours.levels[0:8], inline=True, fontsize=10, fmt="f = %1.1f", use_clabeltext=True)
  File "/usr/local/lib/python3.7/site-packages/matplotlib/pyplot.py", line 2496, in clabel
    return gca().clabel(CS=CS, *args, **kwargs)
TypeError: clabel() got multiple values for argument 'CS'

Я все посмотрел, но не могу clabel, изменилось ли использование clabel, или если это ошибка...

  • 0
    Демонстрация метки контура отображает то же сообщение об ошибке, поэтому ошибка более вероятна.
  • 0
    @ Mr.T Также помогает всегда смотреть на пример из используемой версии.
Теги:
matplotlib
contour

1 ответ

1
Лучший ответ

Это ошибка в matplotlib 3.0.0, которая теперь исправлена. Он будет доступен с выходом 3.0.1.

Обратите внимание, что это pyplot -only. Это не происходит при использовании объектно-ориентированных методов. Следовательно, это также не присутствует в примере контурной метки. См. Этот пример в то же время.

Самое простое исправить здесь - использовать методы axes вместо pyplot, то есть plt.gca().clabel вместо plt.clabel

import matplotlib.pyplot as plt
import numpy as np

def f(x1, x2):
    return (x2 - x1)**4 + 8 * x2 * x1 - x1 + x2 + 3

x1 = np.linspace(-2,2,1000)
x2 = np.linspace(-2,2,1000)

X1, X2 = np.meshgrid(x1, x2)
F = f(X1, X2)
F = np.clip(F, a_min=None, a_max=50)

contours = plt.gca().contour(X1, X2, F, 50, cmap="rainbow")
print(contours.levels)
plt.gca().clabel(contours, contours.levels[0:8], inline=True, fontsize=10, 
                 fmt="f = %1.1f", use_clabeltext=True)

plt.title('Q3a Solution')
plt.xlabel('x1')
plt.ylabel('x2')


plt.show()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню