使用函数绘制等高线图
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()
你应该得到这样的东西
我遇到了以下问题;
我必须在某个点 (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()
你应该得到这样的东西