2013-11-22 30 views
0

我有两个变量功能如何在python中绘制隐式函数?

Z = m_1 m_2/pow(m_1 + m_2, 2) 

我想绘制恒定值的曲线Zm_1 - m_2平面(轮廓)。例如,Z=0.10, 0.15, 0.20, 0.25。通过matplotlib在python中完成这项工作的最简单方法是什么?以下是我尝试过的,但并不完全符合我的要求。我期望不同的结果。我需要确定这是否正确。

def etta(m_1, m_2): 
    return m_1*m_2/pow(m_1 + m_2, 2) 

m_1 = linspace(4, 14, 100) 
m_2 = linspace(4, 14, 100) 

X,Y = meshgrid(m_1, m_2) 

Z = etta(X, Y).T 

print(sqrt(2)) 

fig, ax = plt.subplots() 
cnt = contour(Z, cmap=cm.RdBu) 

plt.show() 
+0

这似乎是一个非常标准的轮廓问题(不是吗?)。你有没有我们可以看看有什么不工作的代码? – mgilson

+0

我加了我的代码。感谢您的期待! – Rotail

+0

你的代码产生我所期望的。你也可以用'imshow(Z,origin ='lower')来比较。你期望它看起来像什么? – askewchan

回答

2

也许这就是你想要什么:

V = [0.10, 0.15, 0.20, 0.25] 
cnt = plt.contour(X, Y, Z, V, cmap=cm.RdBu) 

这将在吸取通过V给定的值线。但问题是,您给出的值大多不会显示在由XY给出的域中。您可以通过使用imshow看全功能看到这一点:

plt.imshow(Z, extent=(X.min(), X.max(), Y.min(), Y.max()), origin='lower', cmap=cm.RdBu) 

imshow

contour

增加V值看多线:

V = np.linspace(.1, .3, 25) 
plt.contour(X,Y,Z,V, cmap=cm.RdBu) 

enter image description here