在轮廓图上限制clabel

时间:2018-10-20 11:40:24

标签: python matplotlib contour

我正在尝试使用contour()的{​​{1}}函数来绘制函数。我尝试将matplotlib.pyplot添加到绘图中,但不想为每个级别(仅前几个)添加标签。从各种演示和文档中,我可以了解以下内容:

clabel

该代码在matplotlib 2.1.2版中运行时有效,但是在3.0.0版中运行相同的代码会出现以下错误:

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()

我已经四处张望,但是如果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' 的用法已更改,或者这是一个错误,则无法解决...

1 个答案:

答案 0 :(得分:1)

这是matplotlib 3.0.0中的错误,现在为fixed。即将发布的3.0.1版本将提供该功能。

请注意,这是仅pyplot的错误。使用面向对象的方法时不会发生这种情况。 因此,它也没有出现在contour label example中。同时请参阅该示例。

这里最简单的解决方法是使用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()