Pythonでグラフを描くときは、Matplotlib
を使うことが多いですが、
- グラフの「この要素」を変更するには、「どのメソッド」を使えばいいのかわからない…。
- 検索するのが大変で、もう
Matplotlib
使いたくない!
という方のために、
Matplotlib
の軸・目盛り・目盛り線の設定
について総まとめしました。
私自身も今回紹介する内容を覚えてからは、Matplotlib
の軸周りの設定はある程度自力でできるようになっています。
- 軸・目盛り・目盛り線の設定サマリーチャート
- 軸周りの設定の前に…
- 軸ラベルの設定
- 軸の最大値・最小値の設定
- 目盛の表示値を変更
- 対数目盛に変更
- 補助目盛を追加
- 目盛り線の表示・設定
- 軸周りの設定総まとめ
- オススメ|matplotlibとデータ分析の勉強方法
軸・目盛り・目盛り線の設定サマリーチャート
軸周りの設定のサマリーチャートがこちらです。
以下では、各メソッドの使い方を詳しく解説していきます。
時間軸の設定
時間軸の設定については、次の記事で別途解説しています。
数値やラベルの軸とは、設定方法が異なるので、こちらもチェックしてみてください。
軸周りの設定の前に…
まずは、Matplotlib
の基本的なグラフの描き方を紹介します。
そもそもMatplotlib
の使い方がよくわからないという方は、次の入門者用のわかりやすい解説記事がおススメです。
pltメソッドとオブジェクト指向
Matplotlib
ユーザーを混乱させている原因の一つが、
Matplotlib
のグラフ絵画には2つのスタイルがある
という点です。
- pltメソッド:
plt.plot()
から始めて、plt.○○○
を使用していく - オブジェクト指向:
fig, ax = plt.subplots()
から始めて、ax.set_○○○
を使用していく
(前者のpltメソッドは、1と2の区別をしやすいように私が命名しました。)
基本的には、次の使い分けをします。
- pltメソッド ⇒ グラフを手軽に描く
- オブジェクト指向 ⇒ グラフの詳細設定を行う
以下の解説では、pltメソッド、オブジェクト指向の両方のメソッドを併記しています。
自分で使用する方のメソッドをチェックしてみてくださいね。
ほとんどの場合、plt.○○○
とax.set_○○○
の「○○○
部分は共通」です。
片方の方法を覚えれば、自然ともう一方も覚えられます!
pltメソッドの使い方を詳しく知りたい方は、こちらの記事も参考にしてください。
オブジェクト指向のスタート地点plt.subplots()
については、次の記事で解説しています。
基本のグラフ
軸・軸目盛・目盛り線の解説で使用する基本グラフを作成します。
まずはモジュールを読み込み、サンプルデータを作成します。
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 1000)
y = np.log10(x)
pltメソッドとオブジェクト指向でそれぞれ、基本的なグラフを描いてみます。
plt.plot(x, y)
plt.show()
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()
pltメソッドでもオブジェクト指向でも同じグラフが出力されます。
このグラフをもとに、軸・目盛り・目盛り線の設定方法について解説していきます。
【参考】inline
について詳しく知りたい方はこちらをチェック
軸ラベルの設定
軸ラベルの設定には、xlabel()
、ylabel()
を使用します。
ラベル名だけでなく、ラベルの見た目の設定をすることもできます。
軸ラベルの表示
軸ラベルは、xlabel()
、ylabel()
で表示します。
表示項目 | pltメソッド | オブジェクト指向 |
---|---|---|
x軸ラベル | plt.xlabel("x軸ラベル名") |
ax.set_xlabel("x軸ラベル名") |
y軸ラベル | plt.ylabel("y軸ラベル名") |
ax.set_ylabel("y軸ラベル名") |
軸名だけを引数として渡すと、デフォルトの見た目設定で軸ラベルが表示されます。
plt.plot(x, y)
plt.xlabel("x-lable")
plt.ylabel("y-lable")
plt.show()
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel("x-label")
ax.set_ylabel("y-label")
plt.show()
グラフに軸ラベルが表示されています。
軸ラベルに日本語を使用したい場合は、特別な設定が必要になります。
軸ラベルの見た目変更
オプション引数で軸ラベルの位置や見た目を調整できます。
キーワード | 略称 | 設定内容 | 設定値の例 |
---|---|---|---|
labelpad |
軸からのラベルの距離 | 0 :デフォルト位置正の値 :軸から離して表示負の値 :軸に近づけて表示 |
|
color |
c |
文字の色 | 色の名前など ex) gray , red , blue |
fontsize |
size |
文字の大きさ | 数値(pt) で指定 or small , large など名前で指定 |
fontweight |
weight |
太字に設定 | bold :太字 |
fontstyle |
style |
斜体に設定可能 | italic :斜体 |
rotation |
文字の回転 | vertical :垂直horizontal :水平数値 :回転角度 |
次の例では軸ラベルの設定を変更しています。
plt.plot(x, y)
plt.xlabel("x-lable", style ="italic" , size = "xx-large", color ="blue")
plt.ylabel("y-lable", labelpad = 35, weight ="bold" , size = "xx-large", rotation = "horizontal")
plt.show()
軸ラベルの見た目が変更されています。
- テキスト、色の設定について詳しく知りたい方はこちらをチェック!
軸の最大値・最小値の設定
軸の最大値・最小値を変更した場合は、xlim()
、ylim()
を使用します。
表示項目 | pltメソッド | オブジェクト指向 |
---|---|---|
x軸の最大・最小値 | plt.xlim(最小値, 最大値) |
ax.set_xlim(最小値, 最大値) |
y軸の最大・最小値 | plt.ylim(最小値, 最大値) |
ax.set_ylim(最小値, 最大値) |
最大値、最小値を指定値に変更してみます。
plt.plot(x, y)
plt.xlim(0, 1000)
plt.ylim(0, 5)
plt.show()
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlim(0, 1000)
ax.set_ylim(0, 5)
plt.show()
最大値、最小値が変更されていますね。
目盛の表示値を変更
デフォルトでは、目盛りの値は自動で設定されます。
自分で表示する値を指定したい場合には、xticks()
、yticks()
を使用します。
表示項目 | pltメソッド | オブジェクト指向 |
---|---|---|
x軸ラベル | plt.xticks() |
ax.set_xticks() |
y軸ラベル | plt.yticks() |
ax.set_yticks() |
ここでは、次の4つのxticks()
の使い方を解説していきます。
目盛り指定の内容 | pltメソッド | オブジェクト指向 |
---|---|---|
リストで指定 | plt.xticks([ 目盛り値 ]) |
ax.set_xticks([ 目盛り値 ]) |
np.arange()で指定 | plt.xticks( np.arange(start, stop, step)) |
ax.set_xticks( np.arange(start, stop, step)) |
文字列に変更 | plt.xticks([ 目盛り位置 ], [表示値]) |
ax.set_xticks([ 目盛り位置 ]) ax.set_xticklabels([ 表示値 ]) |
非表示 | plt.xticks([]) |
ax.set_xticks([]) |
※y軸の目盛りを変更するには、xticks()
の代わりに、yticks()
を指定します。
リストで目盛りを指定:xticks([目盛り値のリスト])
表示したい目盛り値をリストで与えて指定することができます。
xticks([ 目盛り値のリスト ])
目盛り値をリストで指定してみます。
plt.plot(x, y)
plt.xticks([0, 500, 1000])
plt.show()
目盛り値が、指定したリストの数値に変更されました。
目盛り値のリストは等間隔で指定する必要はありません。とびとびでもOKです。
plt.plot(x, y)
plt.xticks([0, 500, 750, 1000])
plt.show()
np.arangeで値を指定:xticks( np.arange(start, end, step) )
xticks()
には、np.arrange()
で生成した、配列ndarray
を与えることもできます。
np.arange(start, stop, step)
は
- 始点
start
- 終点
stop
- 数字の間隔
step
を指定して、等間隔の連続する配列ndarray
を生成します。
axis_array = np.arange(0, 1001, step=100)
#⇒array([ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000])
これをxticks()
に渡して、目盛りを設定することができます。
plt.plot(x, y)
plt.xticks(np.arange(0, 1001, step=100))
# np.arange(0, 1001, step=100) = 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000
plt.show()
目盛り値にnp.arange()
で作成した配列が設定されました。
np.arange()
の詳しい使い方は、こちらの記事をチェックしてください。
目盛り値に文字列を設定
文字列の指定方法は、pltメソッドとオブジェクト指向で設定方法が異なります。
目盛り指定の内容 | pltメソッド | オブジェクト指向 |
---|---|---|
目盛り値を文字列に変更 | plt.xticks([ 目盛り位置], [表示値]) |
ax.set_xticks([ 目盛り位置]) ax.set_xticklabels([ 表示値 ]) |
① pltメソッドの場合
次のように[文字列を表示する目盛り位置]
と[表示する文字列]
をそれぞれxticks()
に渡します。
xticks([ 文字列を表示する目盛り位置 ], [ 表示する文字列])
サンプルデータで実行例をみてみましょう。
plt.plot(x, y)
plt.xticks([0, 500, 1000], ["zero", "five hundred", "thousand"])
plt.show()
目盛りの値が、指定したリストの数値に変更されました。
② オブジェクト指向の場合
次のように、2つのメソッドを順番に実行します。
ax.set_xticks([ 目盛り位置のリスト ])
ax.set_xticklabels([ 表示値のリスト ])
サンプルデータで実行例をみてみましょう。
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xticks([0, 500, 1000])
ax.set_xticklabels(["zero", "five hundred", "thousand"])
plt.show()
出力結果は、pltメソッドと同じです。
文字列を表示する目盛り位置は、np.arange()
で設定することもできます。
目盛りを非表示
xticks()
に空のリスト[]
を渡すと、軸目盛を非表示にすることができます。
目盛り指定の内容 | pltメソッド | オブジェクト指向 |
---|---|---|
x軸を非表示 | plt.xticks([]) |
ax.set_xticks([]) |
y軸を非表示 | plt.yticks([]) |
ax.set_yticks([]) |
x軸、y軸両方を非表示にする場合は、xticks([])
、yticks([])
の両方を実行します。
plt.plot(x, y)
plt.xticks([])
plt.yticks([])
plt.show()
軸目盛が非表示になりました。
対数目盛に変更
対数目盛を使用する場合には、xscale('log')
、yscale('log')
を実行します。
表示項目 | pltメソッド | オブジェクト指向 |
---|---|---|
x軸ラベル | plt.xscale('log') |
ax.set_xscale('log') |
y軸ラベル | plt.yscale('log') |
ax.set_yscale('log') |
plt.xscale('log')
のみを実行して、片対数グラフを作成してみます。
plt.plot(x, y)
plt.xscale("log")
plt.show()
x軸がlogスケールに変更され、片対数グラフになりました。
補助目盛を追加
デフォルトでは補助目盛は非表示なっています。
補助目盛を表示するには、minorticks_on()
を実行します。
表示項目 | pltメソッド | オブジェクト指向 |
---|---|---|
補助目盛 | plt.minorticks_on() |
ax.minorticks_on() |
plt.minorticks_on()
で補助目盛を表示してみます。
plt.plot(x, y)
plt.minorticks_on()
plt.show()
補助目盛が表示されています。
x軸またはy軸のみ補助目盛を表示する場合には、Locator
やFormatter
などを使用しますが、ここでは割愛します。
目盛り線の表示・設定
デフォルトでは目盛り線は非表示になっています。
目盛り線を表示するには、grid()
を使用します。
表示項目 | pltメソッド | オブジェクト指向 |
---|---|---|
目盛り線 | plt.grid() |
ax.grid() |
引数を省略すると、x/y軸両方の主目盛り線に目盛り線が引かれます。
plt.plot(x, y)
plt.grid()
plt.show()
引数を与えると:
- 線を引く軸(x軸/y軸)の指定・主/補助目盛りの指定
- 目盛り線の見た目変更
をすることができます。
線を引く軸の指定・主/補助目盛りの指定
キーワード引数で
- 目盛り線を引く軸(x軸/y軸):
axis
- 主/補助目盛り:
which
を指定することができます。
キーワード | 値 | 解説 |
---|---|---|
axis |
"x" |
x軸を指定 |
"y" |
y軸を指定 | |
"both" |
x/y軸両方を指定(デフォルト) | |
which |
"major" |
主目盛り線を指定(デフォルト) |
"minor" |
補助目盛り線を指定 | |
"both" |
主/補助目盛り線を指定 |
補助目盛に目盛り線を引くには、事前に補助目盛を表示しておく必要があります。
plt.plot(x, y)
plt.grid(axis="x")
plt.minorticks_on()
plt.grid(which = "both", axis="y")
plt.show()
x軸には主目盛り線、y軸には主/副両目盛り線が引かれています。
目盛り線の見た目変更
キーワード引数で補助線の見た目を変更することができます。
よく使用する設定項目を下表にまとめています。
キーワード | 略称 | 設定先 | 値 |
---|---|---|---|
color |
c |
目盛り線の色の設定 | 色の名前など ex) gray , red , blue |
alpha |
線の透明度 | 0 (完全透明)~1 (不透明) |
|
linewidth |
lw |
線の太さ | 数値 ptで指定 |
linestyle |
ls |
線のスタイル | - , -- , -. , : , で指定 |
目盛り線を灰色の点線で表示してみます。
plt.plot(x, y)
plt.grid(color = "gray", linestyle="--")
plt.show()
目盛り線の見た目が変更されています。
- 色の設定について詳しく知りたい方はこちらをチェック!
軸周りの設定総まとめ
今回紹介した軸周りの設定を全体的に適用した例を紹介します。
pltメソッド、オブジェクト指向それぞれで次のようなグラフを描いてみましょう
pltメソッド
plt.plot(x, y)
# 軸ラベルの設定
plt.xlabel("x-label", size = "large", color ="green")
plt.ylabel("y-label", size = "large", color="blue")
# 軸の最大値・最小値の設定
plt.xlim(0, 1200)
plt.ylim(0, 4)
# 目盛りの表示値を変更
plt.xticks(np.arange(0, 1201, step=300))
plt.yticks([0, 1, 2, 3, 4], [" ", "I", "II", "III", "IV"])
# 補助目盛を表示
plt.minorticks_on()
# 目盛り線の表示
plt.grid(which="major", color="black", alpha=0.5)
plt.grid(which="minor", color="gray", linestyle=":")
plt.show()
オブジェクト指向
fig, ax = plt.subplots()
ax.plot(x, y)
# 軸ラベルの設定
ax.set_xlabel("x-label", size = "large", color ="green")
ax.set_ylabel("y-label", size = "large", color="blue")
# 軸の最大値・最小値の設定
ax.set_xlim(0, 1200)
ax.set_ylim(0, 4)
# 目盛りの表示値を変更
ax.set_xticks(np.arange(0, 1201, step=300))
ax.set_yticks([0, 1, 2, 3, 4])
ax.set_yticklabels([" ", "I", "II", "III", "IV"])
# 補助目盛を表示
ax.minorticks_on()
# 目盛り線の表示
ax.grid(which="major", color="black", alpha=0.5)
ax.grid(which="minor", color="gray", linestyle=":")
plt.show()
軸の設定が終わると、次は凡例の設定ですね。そのときは、こちらを参考にしてください。
オススメ|matplotlibとデータ分析の勉強方法
今回は、Matplotlib
の軸・目盛り・目盛り線の設定について基本的なものを解説しました。
matplotlib
は奥の深いモジュールですが、なかなかわかりにくい部分もあります…。
そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。
また、データ分析初心者の方にはこちらの記事もおススメです。
私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。
何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。