Matplotlib 使用函数的等高线图

Matplotlib 使用函数的等高线图,matplotlib,contour,opencv-contour,Matplotlib,Contour,Opencv Contour,我被以下问题困住了 我必须做一个两个变量的函数的等值线图,在某个点chi2X,Y,chi=2.3。我已经尝试了很多方法,但我仍然不知道如何去做。例如,我做了以下工作: import numpy as np import matplotlib.pyplot as plt from function import chi2 # Two variable function imported from another file x = np.arange(-2,2,0.02) y

我被以下问题困住了

我必须做一个两个变量的函数的等值线图,在某个点chi2X,Y,chi=2.3。我已经尝试了很多方法,但我仍然不知道如何去做。例如,我做了以下工作:

  import numpy as np
  import matplotlib.pyplot as plt
  from function import chi2  # Two variable function imported from another file

  x = np.arange(-2,2,0.02)
  y = np.arange(0,1.5,0.02)

  X,Y= np.meshgrid(x,y)

  Z = chi2(X,Y)

  plt.figure()
  CS = plt.contour(X,Y,Z)
  plt.clabel(CS,inline=2.3, fontsize=10)
  plt.show()
获得的错误是提供的函数没有返回有效的浮点。但是我可以打印值并使用该函数工作,所以我不知道到底是什么问题

先谢谢你


Bernat.

只要问题中没有给出可验证的代码,这里有一个可行的解决方案:

import numpy as np
import matplotlib.pyplot as plt

chi2 = lambda x,y: 2*(np.sin(x*4)+1)*np.sin(np.sqrt(y*4)+x)

x = np.arange(-2,2,0.02)
y = np.arange(0,1.5,0.02)

X,Y= np.meshgrid(x,y)

Z = chi2(X,Y)

plt.figure()
CS = plt.contour(X,Y,Z, [2.3])
plt.clabel(CS,inline=True, fontsize=10)
plt.show()

如果要使用泛型函数,关键是首先将其矢量化

比如说

import numpy as np
import matplotlib.pyplot as plt

def f(x, y):
    return 5 * x ** 2 + 2 * y + 8

v_func = np.vectorize(f)    # major key!

x, y = np.meshgrid(np.linspace(-5, 5, 100),
                   np.linspace(-5, 5, 100))

fig, ax = plt.subplots(1)
ax.contour(x, y, v_func(x, y))
plt.show()
你应该得到这样的东西


报告错误时,需要包括回溯。您还需要包括一个。在这里,我们错过了chi2函数。然而,这个函数,加上你如何调用它,是问题的根源。谢谢,我发现了错误。通过你的例子,我可以看出问题出在我的函数上,而不是等高线图本身。非常感谢。