python - 極座標プロットのエラーバーがmatplotlibの角度で回転しません

原文 python matplotlib

matplotlibでエラーバー付きの極棒プロットを作成したいのですが。次のコードを使用すると、すべてのエラーバーに水平方向の配置があり、バーが90度または270度のケースに対応していない限り、エラーバーは正しく表示されません。

from numpy import *
from matplotlib import pyplot as py


r=zeros([16])
err=zeros([16]) 
for i in range(16):
    r[i]=random.randint(400,600)
    err[i]=random.randint(20,50)
theta=arange(0,2*pi,2*pi/16)
width = pi*2/16

fig = py.figure(figsize=(8,8))
ax = fig.add_axes([0.1, 0.1, 0.75, 0.79], polar=True)

bars = ax.bar(theta+pi/16, r, width=width, bottom=0.0,yerr=err)
ax.set_ylim(0,700)
py.show()




個々のバーのシータを考慮するためにエラーバーを取得するにはどうすればよいですか?
答え
したがって、エラーバーはLine2Dオブジェクトで作成されているようです。つまり、エラーバーの位置(x [i]、y [i] + yerr [i])に対応するデータポイントが破線でプロットされます。行内のダッシュは、単なる記号であるため、常に同じです。これは明らかに極座標プロットでは機能しません。そのため、このエラーバーの設定を削除し、各エラーバーを個別に追加する必要があります。線は正しい向きになっています。

これを行うルーチンは次のとおりです。

from matplotlib.lines import Line2D
from math import acos,sqrt

def correct_errorbar(ax,barlen=50,errorline=1):
    """
    A routine to remove default y-error bars on a bar-based pie chart and 
    replace them  with custom error bars that rotate with the pie chart.
    ax -- the axes object that contains the polar coordinate bar chart
    barlen -- the perpendicular length of each error bar
    errorline -- the number of the Line2D object that represents the original
       horizontal error bars.

    barlen will depend on the magnitude of the "y" values, ie the radius. 
    This routine was tested with a plot consisting solely of bar chart, and 
    if other Line2D objects are added, either directly or through further
    plot commands, errorline many need to be adjusted from its default value. 
    """
    # get error bar positions
    x,y = ax.lines[errorline].get_data()
    # remove incorrect bars
    del ax.lines[errorline]
    # add new lines fixing bars
    for i in range(len(y)):
        r = sqrt(barlen*barlen/4+y[i]*y[i])
        dt = acos((y[i])/(r))
        newline = Line2D([x[i]-dt,x[i]+dt],[r,r],lw=barlen/100.)
        ax.add_line(newline)
関連記事

python - ユーザー定義クラスに異なる名前を使用すると、2つのPythonスクリプトの動作が異なる

python - python +セキュリティ

python - エキスパンダーラベルのPangoマークアップ

python - インポートされたメソッドにローカル変数を使用させる

python - AppEngine Task Queue API呼び出しがTaskAlreadyExistsErrorで増加する

python - Pyramid 1.1とMongodbを統合する方法-できるだけ少ない行

python - 出力されたpy2exe exeは署名された場合にのみ実行されません:ImportError

python - python:スクリプトファイルから検索するように相対インポートを強制する

python - なぜPython(WLST)は、ドキュメント化された関数が存在しないと通知するのですか?

python - Pythonが浮動小数点計算で「OverFlow」例外をスローするのはなぜですか?