Mtaplotlibの使い方を知りたい。
- 目盛りを『指数』にする方法は?
- 目盛りの値を、10^3(10の3乗)単位とか、『単位』を指定する方法は?
こんな疑問にお答えします。
この記事の内容
- Y軸の目盛りを『指数』表記にする方法
- X軸の目盛りを『指数』表記にする方法
- 目盛りを、普通の表記に戻す方法
もくじ
グラフの目盛りを『指数』で表示する方法
完成形グラフの例
目盛りを「指数」表示にするには、すでに書いているMatplotlibのコードに、3行追加するだけです。
右下のグラフが、Y軸を「指数表記」(x10^3)へ変更した完成形のグラフです。
どんなコードを追加すればいいかは、以降で説明していきます。
追加するPythonのコード
追加するコードは、以下の3行です。
(例)Y軸を『指数』にして、『10^3 単位』で表示する。
import matplotlib.ticker as ptick # ライブラリをインポートする。
ax.yaxis.set_major_formatter(ptick.ScalarFormatter(useMathText=True)) # こっちを先に書くこと。
ax.ticklabel_format(style="sci", axis="y", scilimits=(3,3)) # 10^3(10の3乗)単位にする。
Pythonでグラフを表示する準備
動作環境
以下、わたしのPython環境です。
- Windows10 (64bit)
- Python 3.10.9
必要なライブラリ
必要なライブラリは、以下です。
- matplotlib
インストールがまだの場合、ターミナルを開いて、以下のようにpipコマンドを実行すればインストールできます。
pip install matplotlib
再びターミナルで、
conda list
と入力すると、パッケージ一覧が表示されます。以下が表示されていればOKです。
matplotlib
① Y軸の目盛りを『指数』表記にする
10^N 形式にする
こんな感じで『指数』表記にできます。
追加するコード
Y軸の目盛りを『指数』表記にするための追加コードは、3行です。
行番号でいうと、2行目・13行目・14行目です。
Pythonのサンプルコード
[matplotlib_yaxis_1.py]
import matplotlib.pyplot as plt
import matplotlib.ticker as ptick # ライブラリをインポートする。
# X軸, Y軸のデータ(各3個)
x = [ 1, 2, 3 ]
y = [ i*100000 for i in x ] # 内包表記
fig, ax = plt.subplots(figsize=(5,5)) # グラフを1個作成
plt.bar(x, y, color='blue', width=0.5) # 棒グラフ
plt.grid(which="both", ls=':') # グリッドの表示
# Y軸の目盛りの表示を変更する。
ax.yaxis.set_major_formatter(ptick.ScalarFormatter(useMathText=True)) # こっちを先に書くこと。
ax.ticklabel_format(style="sci", axis="y", scilimits=(3,3)) # 10^3単位の指数で表示する。
plt.show()
13行目・14行目は、書く順番があります。
「ticklabel_format()」を先に書くと、指数にならずに、普通の表記になってしまいます。
指数で表示するには、サンプルコードのように、set_major_formatter() ⇒ ticklabel_format() の順番で書きましょう。
1eN 形式にする
1e3や、1e5 の形式で表示する方法です。(この形式は、直観的にわかりにくいのですが・・・、参考として紹介します。)
削除するコード
サンプルコード 13行目「set_major_formatter()」の行を削除(またはコメント行)します。
すると、scilimits=(3,3)の場合は、下図のように「1e3」(1000)の単位で表示されます。
② X軸の目盛りを『指数』表記にする
追加するコード
Y軸の場合と同じように、以下の3行を追加します。
import matplotlib.ticker as ptick # ライブラリをインポートする。
ax.xaxis.set_major_formatter(ptick.ScalarFormatter(useMathText=True)) # こっちを先に書くこと。
ax.ticklabel_format(style="sci", axis="x", scilimits=(3,3)) # 10^3単位の指数で表示する。
メソッドは、Y軸の表示と同じです。
違いは、ticklabel_format()の「axis="x"」で、"x軸”を指定するところです。
③ 目盛りを、普通の表記に戻す
普通の表記に戻したい場合は、追加した3行を削除するか、または、以下のように、 style を、sci ⇒ plain に変更してもできます。
指数表記のとき
ax.ticklabel_format(style="sci", axis="y", scilimits=(3,3))
普通の表記のとき
style を、sci ⇒ plain に変更します。
ax.ticklabel_format(style='plain',axis='y')
すると、下図のように、普通の表記に戻ります。
参考文献
matplotlib.ticker(英文)
>> https://matplotlib.org/stable/api/ticker_api.html
ticklabel_format・・・軸のフォーマットを設定するクラス
(日本語)>> https://runebook.dev/ja/docs/matplotlib/_as_gen/matplotlib.pyplot.ticklabel_format
(英文)>> https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.ticklabel_format.html
まとめ:グラフの目盛りを指数表示で見やすくする
この記事を通して、Matplotlibを使ってグラフの目盛りを「指数表示」に変えることができるようになりました。
指数表記のグラフを作ってデータが見やすくなると、理解もスムーズに進むと思います。また、目盛りを普通の表記に戻す方法も紹介したので、自分に合った表示を選べますよね。
これからもMatplotlibを活用して、いろんなグラフを作って、データ解析などへどんどんスキルアップしていきましょう!