2013-08-23 1 views
3

x 좌표가 레이블 EF이고 y가 EB로 레이블링되고 z가 a라는 레이블이 지정된 함수로 등고선 플롯을 작성하려고합니다. 아래에 오랜 오류가 반환됩니다. 어떤 도움을 주시면 감사하겠습니다. 이 오류는 오류가등고선 플롯 파이썬의 오랜 오류

TypeError: Input z must be a 2D array. 

은 입력의 크기를 보면 객체를한다고

File "contour.py", line 19, in <module> 
c = plt.contour(EF,EB,a) 
    File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2016, in contour 
    ret = ax.contour(*args, **kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 7326, in contour 
    return mcontour.QuadContourSet(self, *args, **kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1088, in __init__ 
    ContourSet.__init__(self, ax, *args, **kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 686, in __init__ 
    self._process_args(*args, **kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1101, in _process_args 
    x, y, z = self._contour_args(args, kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1148, in _contour_args 
    x,y,z = self._check_xyz(args[:3], kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1180, in _check_xyz 
    raise TypeError("Input z must be a 2D array.") 
TypeError: Input z must be a 2D array. 
+0

30 분 전에이 코드에 대해 뭔가 대답하지 않았습니까? – Jblasco

+0

@Jblasco : 중복 질문 인 경우 왜 그렇게 표시하지 않거나 적어도 링크를 제공하지 않는 것이 좋을까요? – tom10

+0

tom10, 나는 그것을 생각하지 않기 때문에 중복으로 표시하지 않았습니다. 질문이 아니라 코드를 기억하고 있습니다. 링크가 사라진 것처럼 보입니다. 나는 그것이 웬일인지 지워 졌다고 생각한다. – Jblasco

답변

8

입니다 :

print EF.shape, EB.shape, a.shape 
(51,) (51,) (51,) 

당신이이 하지입니다 것을 볼 수 있습니다 2D 배열. XY 대신 사용 하시겠습니까? 내가

a = ((1+.5*(np.exp(1.7*X)+np.exp(1.7*Y)+np.exp(1.7*(X+Y))))/(1+np.exp(1.7*X)+np.exp(1.7*Y)+np.exp(1.7*(X+Y)))) 
c = plt.contour(EF,EB,a,30) 

로 변경하면

는 출력은 모든 흥미로운 물건 주위 (0,0) 때문에 당신의 매개 변수 공간을 조정해야 할 수도 있습니다 것 같습니다

enter image description here

입니다.

+0

내가 뭘 바라보고 있었는지 정확히 알았어. 고맙습니다!! –

+1

문제는 없으며 스택 오버플로에 오신 것을 환영합니다! 좋은 대답을 upvote하고 문제가 해결되면 받아 들일 수있는 사람을 표시하십시오. – Hooked

4

당신은 X ABD Y 대신 EFEB 사용하여 meshgrid로 a를 creat에해야합니다 : 그것은 메모리 부족하지 못할 수도 있습니다 당신이 copy=False를 사용하여 meshgrids를 만들 경우,

a = ((1+.5*(np.exp(1.7*Y)+np.exp(1.7*X)+np.exp(1.7*(Y+X))))/(1+np.exp(1.7*Y)+np.exp(1.7*X)+np.exp(1.7*(Y+X)))) 

또 다른 일을 :

(X,Y) = np.meshgrid(EF,EB, copy=False) 

이 경우 원래 1D 어레이의보기가 생성됩니다.

+3

'copy = False'에 대한 좋은 지적입니다. meshgrid가 다차원 배열을 만드는 새로운 기능 (d> 2)과 결합되어, 나는 수많은 도우미 함수를 대체 할 수있다. – Hooked