2017-09-07 9 views
1

エラーバーのキャップ(matplotlib/pyplot)の別の線スタイルを使用する必要があります。 コード:エラーバーのキャップの線のスタイル

import matplotlib.pyplot as plt 
import math 
import numpy as np 
fig = plt.figure() 
default_size = fig.get_size_inches() 
fig.set_size_inches((default_size[0]*2, default_size[1]*2)) 
x = np.array([math.log(1/8100,10), math.log(1/2025,10), math.log(1/900,10), math.log(1/225,10), math.log(1/100,10), math.log(1/25,10), math.log(1/9,10), math.log(1/4,10)]) 
err = np.array([0.0, 0.0511919632, 0.0901150419, 0.2201860606, 0.2515436715, 0.3060438313, 0.2990926056, 0.1011243898, 0.0, 0.0541676892, 0.0405075604, 0.0634289157, 0.1107514665, 0.1821387670, 0.2449796704, 0.2120694129, 0.0, 0.0474213990, 0.0423746910, 0.0409827213, 0.0553901830, 0.1136068198, 0.1878500012, 0.2665951693]) 
y = np.array([0.9779133796, 1.2868842184, 1.2282204495, 1.4052313201, 1.4373060067, 1.2971323397, 1.2214902860, 1.0246309381, 1.4085423946, 1.6703182160, 1.32153, 1.8226118650, 1.7983345102, 1.6748284241, 1.4835424022, 1.1404502085, 1.4348299503, 1.7042673230, 1.7949013577, 1.8661885162, 1.8814286876, 1.7666944544, 1.6410772747, 1.2509882123]) 
plt.plot(x[0:8], y[0:8], linestyle="solid", label="B", marker="s", color="black") 
plt.plot(x[0:8], y[8:16], linestyle="dashed", label="P", marker="o", color="black") 
plt.plot(x[0:8], y[16:24], linestyle="dotted", label="W", marker="*", color="black") 
plt.errorbar(x[0], y[0], yerr=err[0], marker='s', capsize=12, markersize="12", mfc='blue', color='blue') 
plt.errorbar(x[1], y[1], yerr=err[1], marker='s', capsize=12, markersize="12", mfc='green', color='green') 
plt.errorbar(x[2], y[2], yerr=err[2], marker='s', capsize=12, markersize="12", mfc='red', color='red') 
plt.errorbar(x[3], y[3], yerr=err[3], marker='s', capsize=12, markersize="12", mfc='yellow', color='yellow') 
plt.errorbar(x[4], y[4], yerr=err[4], marker='s', capsize=12, markersize="12", mfc='orange', color='orange') 
plt.errorbar(x[5], y[5], yerr=err[5], marker='s', capsize=12, markersize="12", mfc='purple', color='purple') 
plt.errorbar(x[6], y[6], yerr=err[6], marker='s', capsize=12, markersize="12", mfc='magenta', color='magenta') 
plt.errorbar(x[7], y[7], yerr=err[7], marker='s', capsize=12, markersize="12", mfc='navy', color='navy') 
plt.errorbar(x[0], y[8], yerr=err[8], marker='o', capsize=12, markersize="12", mfc='blue', color='blue') 
plt.errorbar(x[1], y[9], yerr=err[9], marker='o', capsize=12, markersize="12", mfc='green', color='green') 
plt.errorbar(x[2], y[10], yerr=err[10], marker='o', capsize=12, markersize="12", mfc='red', color='red') 
plt.errorbar(x[3], y[11], yerr=err[11], marker='o', capsize=12, markersize="12", mfc='yellow', color='yellow') 
plt.errorbar(x[4], y[12], yerr=err[12], marker='o', capsize=12, markersize="12", mfc='orange', color='orange') 
plt.errorbar(x[5], y[13], yerr=err[13], marker='o', capsize=12, markersize="12", mfc='purple', color='purple') 
plt.errorbar(x[6], y[14], yerr=err[14], marker='o', capsize=12, markersize="12", mfc='magenta', color='magenta') 
plt.errorbar(x[7], y[15], yerr=err[15], marker='o', capsize=12, markersize="12", mfc='navy', color='navy') 
plt.errorbar(x[0], y[16], yerr=err[16], marker='*', capsize=12, markersize="12", mfc='blue', color='blue') 
plt.errorbar(x[1], y[17], yerr=err[17], marker='*', capsize=12, markersize="12", mfc='green', color='green') 
plt.errorbar(x[2], y[18], yerr=err[18], marker='*', capsize=12, markersize="12", mfc='red', color='red') 
plt.errorbar(x[3], y[19], yerr=err[19], marker='*', capsize=12, markersize="12", mfc='yellow', color='yellow') 
plt.errorbar(x[4], y[20], yerr=err[20], marker='*', capsize=12, markersize="12", mfc='orange', color='orange') 
plt.errorbar(x[5], y[21], yerr=err[21], marker='*', capsize=12, markersize="12", mfc='purple', color='purple') 
plt.errorbar(x[6], y[22], yerr=err[22], marker='*', capsize=12, markersize="12", mfc='magenta', color='magenta') 
plt.errorbar(x[7], y[23], yerr=err[23], marker='*', capsize=12, markersize="12", mfc='navy', color='navy') 
plt.savefig("plot.pdf") 
plt.show() 
plt.close() 

私は水平線を使用していないものではなく、むしろ> ---- <など、〇〇---(私が何を意味するかを見るために90度回転)、または他の何でもそうより| ----- |その後、オーバーラップバーは互いを隠さない:

enter image description here

+0

...と、これを生成したコード... –

+0

@AnttiHaapala私はコードで記事を編集しました。 – Marco

+0

サンプルを[[MCVE]]にする練習 - ファイルに貼り付けてすぐに実行できるもの。例:ダミーデータ、すべてのインポートステートメント、および問題のすべてのケースを示すために必要な行以上の行。 – cphlewis

答えて

3

あなたはエラーバーのキャップとしてあなたが好きな記号を使用することができます。

import matplotlib.pyplot as plt 
import numpy as np 
x=np.arange(4) 
y=np.log(np.array([4,2,5,7])) 
yerr = [1,3,2,5] 

l, caps, c = plt.errorbar(x,y,yerr, marker='s', capsize=4, markersize=12, 
         mfc='blue', color='blue') 
l2, caps2, c2 = plt.errorbar(x,y+4,yerr, marker='s', capsize=8, markersize=12, 
         mfc='limegreen', color='limegreen') 

for cap in caps: 
    cap.set_marker("^") 
for cap in caps2: 
    cap.set_marker(ur"$\u266B$") 

plt.show() 

enter image description here

あなたが気づくようしかし、エラーバーの両方のマーカーは同じです。私。 >---<のようなものは、少なくとも簡単ではないが、
<---<.set_marker("^"))またはo---o.set_marker("o"))のようなものは明らかに可能である。

上限と下限の異なるキャップ(>---<)を生成するために、エラーバーの作成を3つのパートに分割することができます。エラーバー自体には上限なしのエラーバーと下限に対する1つのプロットがあります。

import matplotlib.pyplot as plt 
import numpy as np 
x=np.arange(4) 
y=np.log(np.array([4,2,5,7])) 
yerr = np.array([1,3,2,5]) 

plt.errorbar(x,y,yerr, marker='s', capsize=0, markersize=12, color='blue') 
plt.plot(x,y+yerr, marker="v", ls="", color="blue", ms=8) 
plt.plot(x,y-yerr, marker="^", ls="", color="blue", ms=8) 

plt.errorbar(x,y+4,yerr, marker='o', capsize=0, markersize=12, color='limegreen') 
plt.plot(x,y+4+yerr, marker="v", ls="", color='limegreen', ms=8) 
plt.plot(x,y+4-yerr, marker="^", ls="", color='limegreen', ms=8) 

plt.show() 

enter image description here

+0

はい...これが解決しました....ありがとう!私は各垂直(Yポイント)、特定のマーカー(簡単な視覚化のために、いくつかのユニコード文字、塗りつぶしなし)を変更しなければならなかった。そして、私は3色を合計すると、私は別の色で残した各ラインのために。私はここにプロットを掲示します。 – Marco

+0

最終プロット:https://imgur.com/a/5EYhRでも、上限の最後の青いキャップは、上限の最後の赤いキャップによってほとんど見えませんでした。:( – Marco