LoginSignup
0
0

More than 3 years have passed since last update.

matplotlib.pyplotでminor ticksを表示できない

Last updated at Posted at 2019-11-07

前提

 初投稿です。
 皆様におかれましては日々の実験結果を図にまとめていらっしゃると思います。最終的には論文投稿を目指すことになりますが、その際に図の体裁にかなり気を配ることになり、基本的なグラフ作成のガイドラインを参照しながら頑張ることになると思います。
 特に、対数軸を使う時には目盛に気を付ける必要があり、例えば、$10^0$,$10^1$,$10^2$の点には長めの主目盛(major ticks)を描き、$10^0$と$10^1$の間には$2,3,4,,,$の点に副目盛(minor ticks)描く必要があります。
 筆者がpython3のmatplotlib.pyplotで図を作る際にminor ticks(副目盛)を表示できないという問題に遭遇しました。本記事では私の取った対処法を記します。

環境

Python 3.7.3
Anaconda 2019.03
Jupyter notebook 5.7.8

状況

実験データを両対数グラフで表示します。

問題

今回問題に出くわしたコードです。

jupyter_notebook_cell
import matplotlib.pyplot as plt
# begin 本日いじるところ
plt.figure(figsize=(8,8)) #図の大きさ

plt.rcParams["font.size"] = 36 #文字の大きさ

plt.tick_params(which ="major",direction = 'in' ,axis="both"
                , length = 20 ,width = 2 ,pad = 10)
    #major ticks の大きさ
plt.tick_params(which ="minor",direction = 'in' ,axis="both"
                , length = 10 ,width = 1)
    #minor ticks の大きさ
# end 本日いじるところ

plt.xscale("log")
plt.yscale("log")

plt.xlim(10**1,10**6*3)
plt.ylim(0.5,10**4*2)

plt.xticks(10**np.arange(0,7,1))
plt.yticks(10**np.arange(0,5,1))

plt.xlabel("Time, " +r"$t$")
plt.ylabel("Number of RNA")

# 実験データ描画
param1 = [4,3,2,0]
param2 = [0,3,7,-1]

for i,j in zip(param1,param2):
    plt.plot(TimeList,A_3[:,i,j] ,linewidth = 5 ,zorder = 1)

plt.tight_layout()
plt.savefig("qiita\\dis1.png")
plt.show()

実行すると
dis1.png
が得られます。横軸にもminor ticksを表示する設定のはずが表示されません。これはplt.tick_params()をいじっても解決しませんでした。

解決策1-グラフを大きくする。

純粋に軸が狭いから表示を渋っているだけでは?という発想。作者の気持ちを考えていく。

jupyter_notebook_cell
import matplotlib.pyplot as plt
# begin 本日いじるところ
plt.figure(figsize=(14,8)) #図の幅を広げた

plt.rcParams["font.size"] = 36 #文字の大きさ

plt.tick_params(which ="major",direction = 'in' ,axis="both"
                , length = 20 ,width = 2 ,pad = 10)
    #major ticks の大きさ
plt.tick_params(which ="minor",direction = 'in' ,axis="both"
                , length = 10 ,width = 1)
    #minor ticks の大きさ
# end 本日いじるところ

#中略

plt.savefig("qiita\\dis2.png")
plt.show()

実行すると
dis2.png
無事minor ticksが表示されました。よかったですね。

解決策2-文字を小さくする。

窮屈なのがいけないんだな、という所感からやっていきましょう。

jupyter_notebook_cell
import matplotlib.pyplot as plt
# begin 本日いじるところ
plt.figure(figsize=(8,8)) #図の大きさは戻した

plt.rcParams["font.size"] = 20 #文字を小さくした

plt.tick_params(which ="major",direction = 'in' ,axis="both"
                , length = 20 ,width = 2 ,pad = 10)
    #major ticks の大きさ
plt.tick_params(which ="minor",direction = 'in' ,axis="both"
                , length = 10 ,width = 1)
    #minor ticks の大きさ
# end 本日いじるところ

#中略

plt.savefig("qiita\\dis3.png")
plt.show()

実行すると
dis3.png
無事minor ticksが表示されました。よかったですね。

結論

 図の中身が犇めき合っていると、想定した部品が表示されないことがあるようですね。今回は完全な現象論的アプローチだったのでエンジニア的には褒められたものではないかもしれませんね。
 しかし、こんな些細なことで貴重な時間を失ってしまう人が1人でも減ればうれしいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0