Python

【Matplotlib】グラフの目盛りを「指数」表示で見やすくする方法

【PR】この記事には広告を含む場合があります。

35497374_graph
質問する人
質問する人

Mtaplotlibの使い方を知りたい。

  • 目盛りを『指数』にする方法は?
  • 目盛りの値を、10^3(10の3乗)単位とか、『単位』を指定する方法は?


こんな疑問にお答えします。


この記事の内容

  • Y軸の目盛りを『指数』表記にする方法
  • X軸の目盛りを『指数』表記にする方法
  • 目盛りを、普通の表記に戻す方法


グラフの目盛りを『指数』で表示する方法

完成形グラフの例

目盛りを「指数」表示にするには、すでに書いているMatplotlibのコードに、3行追加するだけです。

右下のグラフが、Y軸を「指数表記」(x10^3)へ変更した完成形のグラフです。

matplotlib 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 形式にする

こんな感じで『指数』表記にできます。

matplotlib Y軸の指数表記(x10^3)のグラフの図
matplotlib Y軸の指数表記(x10^3)のグラフ


追加するコード

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()


『指数』表記にする方法

14行目:ticklabel_format()の引数「style」を、"sci"(サイエンスの略)に設定します。


『単位』のケタ数を指定する方法

14行目:ticklabel_format()の引数「scilimits」の値で設定します。

(例)
 ・10^2(100)単位・・・ scilimits=(2,2)
 ・10^6(1000000)単位・・・ scilimits=(6,6)


13行目・14行目は、書く順番があります。
「ticklabel_format()」を先に書くと、指数にならずに、普通の表記になってしまいます。

指数で表示するには、サンプルコードのように、set_major_formatter() ⇒ ticklabel_format() の順番で書きましょう。


1eN 形式にする

1e3や、1e5 の形式で表示する方法です。(この形式は、直観的にわかりにくいのですが・・・、参考として紹介します。)

削除するコード

サンプルコード 13行目「set_major_formatter()」の行を削除(またはコメント行)します。

すると、scilimits=(3,3)の場合は、下図のように「1e3」(1000)の単位で表示されます。

matplotlib Y軸の指数表記(1e3)のグラフの図
matplotlib Y軸の指数表記(1e3)のグラフ


② 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 Y軸が通常表記のグラフの図
matplotlib 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を活用して、いろんなグラフを作って、データ解析などへどんどんスキルアップしていきましょう!


-Python