2013-11-22 48 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