2012-12-13 8 views
1

숫자에 임의의 수의 2D 그림 (지도 및 간단한 등고선 도표)을 생성하는 코드를 개발 중입니다. matplotlib 서브 플로트 루틴은 이에 적합합니다. 아래의 단순화 된 예제에서는 모든 것이 제대로 작동합니다. 그러나 서브 플로트, contourf 및 colorbar에 대해 똑같은 명령을 사용하는 실제 응용 프로그램에서는 색상 막대의 레이블이 나타나지 않습니다 (색상 패치는 괜찮은 것 같습니다). 문서를 읽고 웹을 검색 한 후에도 문제가 무엇인지 찾기 시작할 수있는 단서조차 없습니다. 내 colorbar 인스턴스 (cbar)가있는 경우 눈금 표시 위치가 적합한 지, 눈금 표시가 표시로 설정되었는지, 내 글꼴 설정이 적합한 지 등을 확인할 수 있어야합니다.하지만 실제로 어떻게 확인합니까? 이러한 속성? 이미 비슷한 문제가 발생 했습니까? (그리고 더 나은 점 : 해결책을 찾았습니까?) 오 예 : 실제 plotting 루틴 (contourf 명령이 실행되는 곳)에서 수동으로 새로운 그림과 축을 작성하면 다시 작동합니다. 하지만 그것은 figure 레이아웃에 대한 모든 제어권을 잃는 것을 의미합니다. Axes 인스턴스를 올바르게 전달하지 않을 수 있습니까?matplotlib colorbar subplots : 레이블이 사라짐

fig, ax = plt.subplots(nrows, ncols) 
row, col = getCurrent(...) 
plotMap(x, y, data, ax=ax[row,col], ...) 

그런 다음, plotMap 내부 : 여기에 내가 무엇을위한

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(0.,360.,5.)*np.pi/180. 
y = np.arange(0.,360.,5.)*np.pi/180. 
data = np.zeros((y.size, x.size)) 
for i in range(x.size): 
    data[:,i] = np.sin(x[i]**2*y**2) 
fig, ax = plt.subplots(2,1) 
contour = ax[0].contourf(x, y, data) 
cbar = ax[0].figure.colorbar(contour, ax=ax[0], orientation='horizontal', shrink=0.8) 
contour = ax[1].contourf(x, y, data, levels=[0.01,0.05,0.1,0.05]) 
cbar = ax[1].figure.colorbar(contour, ax=ax[1], orientation='horizontal', shrink=0.8) 
plt.show() 

감사 :

c = ax.contourf(x, y, data, ...) 
ax.figure.colorbar(c, ax=ax, orientation="horizontal", shrink=0.8) 

바와 같이 단순화 된 플롯과 인공 데이터를 아래의 예는 잘 작동 이상했다 어떤 도움이라도! 좀 더 주위 파고 후

for t in cbar.ax.get_xticklabels(): 
    print t.get_position(), t.get_text(), t.get_visible() 

내게 올바른 텍스트 가시 = TRUE를 나타내고 있지만, 모든 위치가 (0, 0).. 이것이 문제가 될 수 있습니까?

BTW : 축 라벨도 때때로 누락됩니다 ... 그리고 matplotlib 버전 1.1.1을 Windows의 Python 2.7.3과 함께 사용하고 있습니다.

+0

솔루션을 답변으로 게시하여 답변을 닫을 수 있습니까? 나중에 나 자신의 대답을 수락 할 수 있습니다. –

+0

미래의 참조'plt.tight_layout()'(또한'figure' 객체의 메소드)는 종종 놀라운 일을합니다. –

답변

1

확인 - 추적 할 수 있습니다 : matplotlib이 제대로 작동하고 있습니다! 주어진 수의 플롯 패널이 생성되면 오류가 각 페이지 (= 그림)에 약간의 마무리 터치를 추가하는 유틸리티 루틴에 임베드되었습니다. 이 루틴에서 나는 (마지막 페이지에 즉) 빈 플롯 패널을 숨기고 싶어하고 나는

ax = fig.axes 
for i in range(axCurrent, len(ax)): 
    ax[i].set_axis_off() 

으로 이런 짓을 프로그램이 모든 페이지하지만 마지막이 루틴을 입력 한 경우에는, axCurrent 이미 0으로 재설정되었다 따라서 축은 그림에서 모든 축에 대해 스위치 오프되었습니다. 난에 대한 전에

if axCurrent > 0: 

추가 ...
문제를 해결합니다.

죄송합니다. 누군가의 시간을 훔친 경우 죄송합니다. 어쨌든 도움을 청하는 모든 분들께 감사드립니다!

관련 문제