2013-11-22 1 views
0

는 I 내가 m_1 - m_2 평면 (등고선) Z에 대해 일정한 값으로 곡선을 플롯 할어떻게 파이썬에서 암시 적 함수를 그릴 수 있습니까?

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

같이 두 변수의 기능을 갖는다. 예 : Z=0.10, 0.15, 0.20, 0.25. matplotlib를 통해 파이썬에서이 작업을 수행하는 가장 쉬운 방법은 무엇입니까? 다음은 내가 시도한 것이지만, 내가 원하는 것은 아니다. 나는 다른 결과를 기대한다. 이 말이 맞는지 확인해야합니다.

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에 의해 주어진 값에 선을 그릴 것입니다

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

. 그러나 문제는 대부분 사용자가 부여한 값이 XY의 도메인에 나타나지 않는다는 것입니다. 당신은 imshow로 전체 기능을보고이를 볼 수 있습니다

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

enter image description here

:

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

imshow

contour

더 라인을 볼 수 V의 값을 증가

관련 문제