Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【matplotlib】tickの数や間隔を手で与えずに調整したい

リストで渡すとかめんどくさいんですけど、自動調整とかそんなことができるのか・・・?

と思っていたができるっぽい

 

matplotlibの公式ドキュメントがわかりやすいので貼っておきます

Tick locators — Matplotlib 3.4.3 documentation

 

# Multiple Locator
setup(axs[1], title="MultipleLocator(0.5)")
axs[1].xaxis.set_major_locator(ticker.MultipleLocator(0.5))
axs[1].xaxis.set_minor_locator(ticker.MultipleLocator(0.1))

majorのtickを0.5刻み

minorのtickを0.1刻みで表示

 

# Linear Locator
setup(axs[3], title="LinearLocator(numticks=3)")
axs[3].xaxis.set_major_locator(ticker.LinearLocator(3))
axs[3].xaxis.set_minor_locator(ticker.LinearLocator(31))

で表示してる範囲のtickの数を調整できるっぽい

この例だとmajorに3つ、minorに31個

 

実際に使ってみてトラブったらまた追記します

 

----------

 

こういうスマートな方法を知らずに、力技でやったときのメモ

 

■ 参考 : matplotlib.pyplot.yticks

matplotlibのドキュメントによると

plt.yticks(10, 100, 1000)
とかすると、10, 100, 1000のところにticsを打ってくれる

yminとymaxを与えると自動的に1桁ずつticsを打ちたい
(調べても全然いい方法が出てこないので、力技でやっちゃう〜)

 

plt.yticks( 10**np.arange(np.floor(np.log10(ymin)), int(np.log10(ymax))+1, 1) )

logスケールなので、log10でyminとymaxの冪乗のみを取り出す
yminについては、floorで切り捨て
ymaxについてはintで切り上げをする
これだとarangeが1つ少なく出力するのでymaxの方は1を追加している

これは数字の冪乗成分のリストなので、10**で実際の数字に直す