Matplotlibで任意の目盛を追加する

Matplotlibで好きな目盛を追加して描画する方法を調べていたのでメモ。stackoverflowで見つけたTipsの日本語訳

参考文献

python – adding extra axis ticks using matplotlib – Stack Overflow

Question

plt.plot(x,y)
plt.show()

このようなシンプルなコードがあったとして、いまあるx軸に追加で以下のようなリストextraticksを追加したいとのこと。

extraticks=[2.1, 3, 7.6]

軸全体の目盛り間隔をそのままに、追加の目盛を表示させることはできるのでしょうか?

Answer

plt.方式の場合

plt.xticks(list(plt.xticks()[0]) + extraticks)

xticks()メソッドを使えばよいです。このメソッドは引数なしで用いると今の軸情報を返します。

ax.方式の場合

オブジェクト指向になじみがある方はこちらをお使いかもしれませんね。僕もax.派です。

lines = plt.plot(x,y)
ax = lines[0].axes
ax.set_xticks(list(ax.get_yticks()) + extraticks)

グラフオブジェクトを

fig, ax = plt.subplots()

で作っている場合は、1行目と2行目は不要でax.set_xticks(list(ax.get_yticks()) + extraticks)だけでいけます。

Matplotlibに存在する2つの流儀について

公式でも述べられていますが、グラフを描く際にplt.hoge()でやる方法とax.hoge()でやる方法と2つの流儀があります。くわしいことは早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話 – Qiitaに述べられていますので割愛しますが、要するにMATLABに慣れているまたは手っ取り早くグラフを作りたい方は前者を、それ以外は後者を選ぶのがよさそうです。グラフの細かいところをいじったりする場合はplt方式ではできないこともあるので、そのつもりならば最初からax方式で書いてしまった方がいい気がします(2つの書き方をごっちゃにして混乱するよりは)。どのオブジェクトを触っているか分からない不安があるので、自分は主に後者の流儀です。

おやすみなせ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です