1日1新の日々

リマインダ

pythonで棒グラフを描く

pythonで棒グラフを描こうと思って,必要な要素がいろいろあるんだけど,
要素が散らばっていて,イマイチ検索に時間がかかるので個人的にここにまとめておく.
あとまあ,久々に更新しておきたいっていうのもある.

pyplotを使って,リストを棒グラフ化する.
とりあえず,pandasを使って,データフレーム化しているとする.
以下は例.

# 一部品のピッキング時間の平均と偏差(棒グラフとエラーバー)
if len(one_picking_time_rw) != 0:
     fig = plt.figure(figsize = (GRAPH_WIDTH, GRAPH_HEIGHT))
     ax = fig.add_subplot(1, 1, 1)
     ax.bar(1, one_picking_time_rw_ave, yerr = one_picking_time_rw_std, ecolor = "black", capsize = 20)
     ax.annotate(str(one_picking_time_rw_ave) + "+/-" + str(one_picking_time_rw_std), xy = (1 - 0.3, one_picking_time_rw_ave + one_picking_time_rw_std + 0.3), fontsize = TICKS_FONTSIZE)
     plt.yticks(np.arange(0, PICKING_TIME_MAX + 1, 0.1), fontsize = TICKS_FONTSIZE)
     plt.xticks(range(0, 3, 1), fontsize = TICKS_FONTSIZE)
     plt.grid(which = "major", color = "gray", linestyle  = "--")
     plt.ylabel("Picking Time [s]", fontsize = LABEL_FONTSIZE)
     plt.savefig(OUT_DIR_FLAG + "PNG/" + "picking_time_psd_ave.png", bbox_inches = "tight")
     plt.savefig(OUT_DIR_FLAG + "PDF/" + "picking_time_psd_ave.pdf", bbox_inches = "tight")
     plt.savefig(OUT_DIR_FLAG + "EPS/" + "picking_time_psd_ave.eps", bbox_inches = "tight")
     plt.close()

png出力の結果はこんな感じ.

f:id:masayabonobono:20170904233151p:plain

ax.bar(x, y, yerr, ecolor, capsize)

について,

  • x:棒グラフのx座標位置
  • y:棒グラフのy値
  • yerr:エラーバーの値
  • ecolor:エラーバーの色
  • capsize:エラーバーの端の横棒のサイズ
ax.annotate(str, xy, fontsize)

でグラフ中に文字列を挿入できて,

  • str:挿入する文字列
  • xy:挿入する座標


以上.

参考URLは
matplotlib で棒グラフを描く – Python でデータサイエンス
グラフ中にデータラベル(数値)を挿入する(matplotlib) | mkacky
かな.