2012-08-27 3 views
1

가 좀 지수 분포의 그래프에 일부 화살표를 삽입 할 모든 변수 이름과 지수 분포 플롯 : 는 approbriately

example1

import pylab as pl 
import numpy as np 


def gauss2d(x,sigma): 
    return (1/np.sqrt(2*np.pi*sigma))*np.exp(-1/2*(x/sigma)**2) 

def draw_arrow(zero, sigma, function): 
    startx = zero 
    print startx,function(sigma, sigma) 
    arr = pl.Arrow(startx,function(startx+sigma, sigma), sigma,0,fc="k",ec="k") 
    ax = pl.gca() 
    ax.add_patch(arr) 

def plot_gauss2d(): 
    x = np.mgrid[115:135:100j] 
    #x=np.array(zip(range(5)),dtype=float) 
    sigma = 1 
    off=1.0 
    pl.plot(x,gauss2d(x-126.21,3.56), 'b-') 
    draw_arrow(126.21, 3.56, gauss2d) 
    pl.plot(x,gauss2d(x-126.71,4.57), 'b-') 
    pl.plot(x,gauss2d(x-120.64,3.5), 'b-') 
    pl.ylabel('frequency') 
    pl.xlabel('ppm of N') 
    pl.title 
    pl.show() 

def main(): 
    plot_gauss2d()                

if __name__ == "__main__": 
    main() 
가 어떻게 든 화살표 권리를 얻을 수없는 것. 내가 본질적으로 가지고 싶은 것은 다음과 같습니다.

wish 나는 간단하게 알아낼 수없는 것이 바로 내가 원하는 곳으로 화살표를 설정하는 방법입니다. 표준 편차의 포인트를 정확한 높이로 표시해야합니다. 모든 것은 물론 여러 지수 곡선을 만들어야합니다. 왜냐하면 오늘 아침부터 본질적으로이 문제를 다루고 있기 때문에 나는 그에게 총을 줄 것이라고 생각했습니다. annotate 방법이 데모

답변

2

화살표의 문제점은 data 좌표와 비교하여 figure 좌표를 사용한다는 것입니다. @ 폴 제안대로 따라서, 당신은 실제로 내가이 날 전혀 도움이 표시되지 않습니다

import pylab as pl 
import numpy as np 


def gauss2d(x,sigma): 
    return (1/np.sqrt(2*np.pi*sigma))*np.exp(-1/2*(x/sigma)**2) 

def markParameters(m,s): 
    p1=gauss2d(s,s) 
    p2=gauss2d(0,s) 

    pl.annotate("", xy=(m-s, p1), xycoords='data', xytext=(m+s, p1), textcoords='data', arrowprops=dict(arrowstyle="<->", connectionstyle="arc3"),) 
    pl.text(m,p1,'sigma',horizontalalignment='center',verticalalignment='top') 
    pl.annotate("", xy=(m, 0), xycoords='data', xytext=(m, p2), textcoords='data', arrowprops=dict(arrowstyle="<->", connectionstyle="arc3"),) 
    pl.text(m,p2*0.75,'mean',horizontalalignment='right',verticalalignment='center',rotation=90) 

def plot_gauss2d(): 
    x = np.mgrid[115:135:100j] 
    #x=np.array(zip(range(5)),dtype=float) 
    m,s=126,3.56 

    pl.plot(x,gauss2d(x-m,s), 'b-') 
    markParameters(m,s) 

    pl.ylabel('frequency') 
    pl.xlabel('ppm of N') 
    pl.title 
    pl.show() 

def main(): 
    plot_gauss2d() 

if __name__ == "__main__": 
    main() 

enter image description here

+0

감사의 현상금 수여! 이것을 매개 변수, 시그마, "텍스트의 텍스트", "시그마의 텍스트"와 함께 호출 할 수있는 함수로 변환 할 수있는 기회가 있습니까? – tarrasch

+0

수정 사항을 확인하십시오. – imsc

+0

달콤한. upvoted. – tarrasch