2013-09-16 3 views
5

질문 : matplotlib의 윤곽선이 입력 2D 배열에 대해 어떤 순서로 필요합니까?matplotlib 등고선 입력 배열 순서

정교한 :하기 matplotlib 윤곽 문서는 루틴 호출이 scalar_field는 2 차원 배열이어야합니다

x_axis = np.linspace(10,100,n_x) 
y_axis = np.linspace(10,100,n_y) 
matplotlib.pyplot.contour(x_axis, y_axis, scalar_field) 

것을 말한다. scalar_field이 형상에 부여되는 경우, 예를 들어, scalar_field가 플롯

plt.contour(x_axis, y_axis,scalar_field) #incorrect 

방향이 올바르지

scalar_field = np.array([(x*y) for x in x_axis for y in y_axis]) 
scalar_field = scalar_field.reshape(n_x, n_y) 

의해 생성 될 수있다 (회동).

plt.contour(x_axis, y_axis,scalar_field.transpose()) #correct 

그래서 윤곽이 scalar_field이가 기대하는 순서는 무엇 다음 scalar_field는 전치해야 올바른 방향을 복원하려면?

답변

5

당신은 XY에 대한 contour 통과도 2 차원 배열을 사용하여 플롯해야, 다음 scalar_field 배열의 각 점은 좌표에 해당합니다 (x, y), XY. 당신이 x 열을 나타내는 라인과 y을 나타내는 좌표하려면

import matplotlib.pyplot as plt 
import numpy as np 

X, Y = np.meshgrid(x_axis, y_axis, copy=False, indexing='xy') 
plt.contour(X, Y, scalar_field)  

indexing'ij'으로 변경 될 수있는 주장을하지만,이 경우 scalar_fiedij을 사용하여 계산해야합니다 당신은 편리하게 numpy.meshgrid를 사용하여 XY를 만들 수 있습니다 색인 생성.

+0

색인 생성 부분과 주문에 대해 자세히 설명해 주시겠습니까? – Ivan

+0

@Ivan 'xy'인덱싱을 사용하면 위로부터 행렬을 바라 보면서 x 좌표가 왼쪽에서 오른쪽으로 향하고 y 좌표가 아래에서 위로 향하는 것을 상상할 수 있습니다. 이것은 때때로 당신이 원하는 것이 아니기 때문에, 'ij'색인 생성을 사용할 수 있습니다. 첫 번째 색인은 줄로, 두 번째 색인은 열로 볼 수 있습니다 ... –

2

x 값이 열 데이터에 대응 예상하지 행 (즉, x 수평축이고 y 수직축이다). 당신은 그것을 바꾸어 놓았습니다. 그래서 당신은 z 값을 바꾸어서 작동하게 만드는 것입니다. 로 전치을 요구 방지하기 위해

, 당신의 배열을 만들 :

scalar_field = np.array([(x*y) for y in y_axis for x in x_axis]) 
scalar_field = scalar_field.reshape(n_y, n_x) 
+0

문서에서 x 및 y에 대해 말하는 내용을 설명해주십시오. – Ivan

+0

matplotlib 1.2.1의'contour' 문서 문자열은 "* X *와 * Y *는 모두 * Z *와 같은 모양을 가진 2 차원이어야하며, 둘 다 1 차원이어야"''len (X)''는 * Z *에있는 열의 수이고''len (Y)''는 * Z *에있는 행의 수입니다. " – bogatron

+0

그래,하지만 그게 정확히 내 질문이야 : len (x)는 _first_ 색인이므로, 그 모양이 그대로 따라야하고 정답은 모양이 바뀌고 (n_x, n_y), 그 반대의 것은 아닙니다. 그래서 혼란 스럽습니다. – Ivan