Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 等高线图上的极限克拉贝尔_Python_Matplotlib_Contour - Fatal编程技术网

Python 等高线图上的极限克拉贝尔

Python 等高线图上的极限克拉贝尔,python,matplotlib,contour,Python,Matplotlib,Contour,我正在尝试使用matplotlib.pyplot的contour()函数绘制函数。我曾尝试将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,100

我正在尝试使用
matplotlib.pyplot
contour()
函数绘制函数。我曾尝试将
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'
回溯(最近一次呼叫最后一次):
文件“Tutorial1.py”,第16行,在
plt.clabel(等高线,等高线.levels[0:8],inline=True,fontsize=10,fmt=“f=%1.1f”,使用\u clabeltext=True)
clabel中的文件“/usr/local/lib/python3.7/site packages/matplotlib/pyplot.py”,第2496行
返回gca().clabel(CS=CS,*args,**kwargs)
TypeError:clabel()为参数“CS”获取了多个值

我看了所有地方,但无法确定
clabel
的用法是否发生了变化,或者这是否是一个bug…

这是matplotlib 3.0.0中的一个bug,现在已经发布了。它将在即将发布的3.0.1版本中提供

请注意,这是一个只有
pyplot
的错误。使用面向对象方法时不会出现这种情况。 因此,它也不存在于环境中。请同时参考这个例子

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

显示相同的错误消息,因此更有可能出现错误。@Mr.T始终从所使用的版本查看示例也会有所帮助。