1

いくつかの指数分布のプロットにいくつかの矢印を挿入したい:

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()

例1

どういうわけか、私は矢印を正しく取得できないようです。私が本質的に持ちたいのは、次のようなものです。

願い

私が単に理解できないのは、矢印を希望する場所にまっすぐに設定する方法です。正しい高さの標準偏差のポイントをマークする必要があります。もちろん、全体で複数の指数曲線が生成されるはずです。

4

2 に答える 2

2

矢印の問題は、figure座標と比較して座標を使用することdataです。したがって、@Paul が示唆したように、次のように注釈を使用できます。

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()

ここに画像の説明を入力

于 2012-08-28T16:47:19.097 に答える
1

annotateメソッド については、このデモをご覧ください: http://matplotlib.sourceforge.net/examples/pylab_examples/annotation_demo.html

それはあなたが必要とするものを処理するはずです。

于 2012-08-27T23:09:53.577 に答える