以前の記事で信頼区間(エラーバー)を付ける方法を勉強しました。
今回は、Matplotlibでエラーバー を描く時の注意点と、公式のバグ(エラー)について紹介します。
エラーバー の表示間隔を「errorevery=6」とすれば、エラーバー の数を減らすことができますが、青とオレンジのグラフのエラーバー がかぶってしまい、これでも正しく読み取ることができませんよね(真ん中の図)
そこで、「errorevery=(0,6)」とすると、「0番目のプロット点から6間隔でエラーバー を描写する」という設定にできるのですが、これが現在のMatplotlibでは公式のバグで、「errorevery=(0,6)」とプログラムを書くと、エラーでコードが止まってしまいます。
公式のバグなので、仕方ないですよね。。知っていれば1分で諦めが付きますが、知らないと1時間も2時間も悩んでしまいますよね。
現状では、「errorevery=素数」として、なんとかエラーバー のプロットをずらすしか、方法は無いようです。
一応、綺麗にできたので、この図もInstagramに投稿しようと思います:)
エラーバー 間隔を定義する「errorevery」は現在公式バグにより、機能しない
それでは早速ソースコードです。これを出力すると、以下の図になります。import numpy as np import matplotlib.pyplot as plt # example data x = np.arange(0.1, 4, 0.1) y1 = np.exp(-1.0 * x) y2 = np.exp(-0.5 * x) # example variable error bar values y1err = 0.1 + 0.1 * np.sqrt(x) y2err = 0.1 + 0.1 * np.sqrt(x/2) # Now switch to a more OO interface to exercise more features. fig, (ax_l, ax_c, ax_r) = plt.subplots(nrows=1, ncols=3, sharex=True, figsize=(12, 6)) ax_l.set_title('all errorbars') ax_l.errorbar(x, y1, yerr=y1err) ax_l.errorbar(x, y2, yerr=y2err) ax_c.set_title('only every 6th errorbar') ax_c.errorbar(x, y1, yerr=y1err, errorevery=6) ax_c.errorbar(x, y2, yerr=y2err, errorevery=6) ax_r.set_title('second series shifted by 3') #ax_r.errorbar(x, y1, yerr=y1err, errorevery=(0, 6)) 公式のバグ #ax_r.errorbar(x, y2, yerr=y2err, errorevery=(3, 6)) 公式のバグ ax_r.errorbar(x, y1, yerr=y1err, errorevery=5) ax_r.errorbar(x, y2, yerr=y2err, errorevery=7) plt.savefig("logo19.png") plt.show()
2つのグラフを描写すると、エラーバー がかぶって見づらい。なのでエラーバー 間隔をずらして描写したいが、、、
1つ目の図だと、エラーバー がかぶって正しく読み取ることができないですよね。エラーバー の表示間隔を「errorevery=6」とすれば、エラーバー の数を減らすことができますが、青とオレンジのグラフのエラーバー がかぶってしまい、これでも正しく読み取ることができませんよね(真ん中の図)
そこで、「errorevery=(0,6)」とすると、「0番目のプロット点から6間隔でエラーバー を描写する」という設定にできるのですが、これが現在のMatplotlibでは公式のバグで、「errorevery=(0,6)」とプログラムを書くと、エラーでコードが止まってしまいます。
公式のバグなので、仕方ないですよね。。知っていれば1分で諦めが付きますが、知らないと1時間も2時間も悩んでしまいますよね。
現状では、「errorevery=素数」として、なんとかエラーバー のプロットをずらすしか、方法は無いようです。
一応、綺麗にできたので、この図もInstagramに投稿しようと思います:)
コメント