使用函数绘制等高线图

Contour plots using a function

我遇到了以下问题;

我必须在某个点 (chi=2.3) 绘制两个变量 chi2(X,Y) 的函数的等值线图。我尝试了很多方法,但我仍然不知道该怎么做。例如,我做了以下事情:

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

获得的错误是提供的函数不是return有效的浮点数。但是我可以打印值并使用该函数工作,所以我不知道到底是什么问题。

提前致谢。

伯纳特

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

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

如果你想使用泛型函数,关键是先vectorized它。

例如

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

你应该得到这样的东西