2010-03-21 12 views
3

Matplotlib을 사용하여 암시 적 방정식 (예 : y^x = x^y)의 플롯을 만듭니다. 이미 도움을 많이 주신 덕분에 나는 그걸로 꽤 멀어졌습니다. 나는 음모를 만들기 위해 등고선을 사용했다. 내 남은 문제는 등고선을 너비, 색, 특히 zorder와 같이 서식을 지정하는 것입니다. 여기서 윤곽선은 내 눈금 선 뒤에 나타납니다. 표준 함수를 플로팅 할 때 이러한 함수는 잘 작동합니다.Matplotlib에서 등고선의 형식을 지정하는 방법

import matplotlib.pyplot as plt 
from matplotlib.ticker import MultipleLocator, FormatStrFormatter 
import numpy as np 

fig = plt.figure(1) 
ax = fig.add_subplot(111) 

# set up axis 
ax.spines['left'].set_position('zero') 
ax.spines['right'].set_color('none') 
ax.spines['bottom'].set_position('zero') 
ax.spines['top'].set_color('none') 
ax.xaxis.set_ticks_position('bottom') 
ax.yaxis.set_ticks_position('left') 

# setup x and y ranges and precision 
x = np.arange(-0.5,5.5,0.01) 
y = np.arange(-0.5,5.5,0.01) 

# draw a curve 
line, = ax.plot(x, x**2,zorder=100,linewidth=3,color='red') 

# draw a contour 
X,Y=np.meshgrid(x,y) 
F=X**Y 
G=Y**X 
ax.contour(X,Y,(F-G),[0],zorder=100,linewidth=3,color='green') 

#set bounds 
ax.set_xbound(-1,7) 
ax.set_ybound(-1,7) 

#add gridlines 
ax.xaxis.set_minor_locator(MultipleLocator(0.2)) 
ax.yaxis.set_minor_locator(MultipleLocator(0.2)) 
ax.xaxis.grid(True,'minor',linestyle='-',color='0.8') 
ax.yaxis.grid(True,'minor',linestyle='-',color='0.8') 

plt.show() 

답변

3

이 오히려 hackish하지만 ...

은 분명히 현재 릴리스하기 matplotlib는 윤곽에 zOrder를 지원하지 않습니다. 그러나이 지원은 was recently added to the trunk입니다.

그래서 올바른 방법은 1.0 릴리스를 기다리거나 트렁크에서 다시 설치하는 것입니다.

이제 여기에 hackish 부분이 있습니다. 나는 빠른 테스트를했고, 나는

파이썬/사이트 패키지 라인 (618)을 변경 한 경우 /는하기 matplotlib/contour.py

collections.LineCollection 호출로 zOrder를 추가하기 위해서는 특정를 해결 문제.

col = collections.LineCollection(nlist, 
    linewidths = width, 
    linestyle = lstyle, 
    alpha=self.alpha,zorder=100) 

옳은 방법은 아니지만, 꼬집음으로만 작동 할 수 있습니다.

이전 주제에 대한 몇 가지 대답을 수락하면 주제를 벗어난 경우 여기를 클릭하면 도움이 될 것입니다. 사람들은 해당 담당자의 포인트를 좋아합니다 :)

+0

대단히 감사합니다. Mark - 응답 조언에도 감사드립니다. 어떻게 작동했는지 잘 모르겠습니다! – Geddes

관련 문제