Pandas.DataFrame.plotとmatplotlib.plot,エラーバー(yerr)表示を微調整したいのだが・・・。
エラーバーの表示について質問です。
細かなところですが、見栄えの問題で、エラーバーとマーカーとラインの重なりを細かく調整したい場合の方法はありますでしょうか?
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame([[1.0, 10.0, 13.0, 11.0, 0.3],
[2.0, 20.0, 30.0, 32.0, 0.5],
[3.0, 30.0, 45.0, 21.0, 0.7],
[4.0, 15.0, 13.0, 11.0, 0.1]],
index=['a', 'b', 'c', 'd'],
columns=['col1','col2','col3','col4','col5'])
ここから、可視化プログラム。
ax1がpandasのDataFrame.plot、
ax2がmatplotlib.pyplotのplotで書かせています。
fig = plt.figure(figsize=(6,3), dpi=200)
ax1 = fig.add_subplot(121)
df.plot(x="col1",y=["col2","col3","col4"],
color=["red","green","orange"], linewidth = 1.0,
kind="line", linestyle='-',ax=ax1,
yerr="col5",fmt="o", mfc="b", ms=2.0,
elinewidth=1.0,ecolor='blue',capsize=2.0,)
ax2 = fig.add_subplot(122)
CL1=df.loc[:,"col1"]
CL2=df.loc[:,"col2"]
CL3=df.loc[:,"col3"]
CL4=df.loc[:,"col4"]
CL5=df.loc[:,"col5"]
ax2.plot(CL1,CL2,"red",lw = 1.0)
ax2.plot(CL1,CL3,"green",lw = 1.0)
ax2.plot(CL1,CL4,"orange",lw = 1.0)
ax2.errorbar(CL1,CL2,yerr=CL5,xerr=None,fmt="o",ms=2.0, mfc="b",
elinewidth=1.0, ecolor='blue',capsize=2.0)
ax2.errorbar(CL1,CL3,yerr=CL5,xerr=None,fmt="o",ms=2.0, mfc="b",
elinewidth=1.0, ecolor='blue',capsize=2.0)
ax2.errorbar(CL1,CL4,yerr=CL5,xerr=None,fmt="o",ms=2.0, mfc="b",
elinewidth=1.0, ecolor='blue',capsize=2.0)
ax2.legend(('CL2', 'CL3', 'CL4'))
plt.tight_layout()
plt.show()
細かいところですが、pandasの方は、エラーバーが一番うしろに、一方、mayplotの方は、エラーバーとマーカーが前面にあります。
重なり具合の順番を指定できる方法、もしくは、統一する方法があれば、教えて下さい。
pandasのplotの方が、プログラム少なく便利です。見栄えの微調整で問題ありか?matplotのplotでは、エラーバー&マーカーとラインのプログラムが別行なので、その順番を入れ替えてみたが、表示には変化なし。
また、上記、プログラムで、こうした方がいいよとかアドバイスもウェルカムです。
とくに、matplotの方で、1ラインずつ書かせている命令を単純化したいです。
1000ラインとかあると、とても面倒で書けない。for分で回す?
あきらめてpandasのdataframe.plotを使う?見栄えの微調整は?
という問題を今抱えております。
わがままな質問かもしれませんが、見栄えの美しさを追求しております。
みなさん、この程度の折れ線グラフを描きたい場合、
pandasとmatplotどちら派なんでしょう?
また、pandasのplotではできないが、matplotのplotなら
こんな事ができる!!等のコメントも嬉しいです。
よろしくお願いいたします。