YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定

Pythonでグラフを描くときは、Matplotlibを使うことが多いですが、

  • グラフの「この要素」を変更するには、「どのメソッド」を使えばいいのかわからない…。
  • 検索するのが大変で、もうMatplotlib使いたくない!

という方のために、

  • Matplotlib軸・目盛り・目盛り線の設定

について総まとめしました。

私自身も今回紹介する内容を覚えてからは、Matplotlibの軸周りの設定はある程度自力でできるようになっています。

軸・目盛り・目盛り線の設定サマリーチャート

軸周りの設定のサマリーチャートがこちらです。

以下では、各メソッドの使い方を詳しく解説していきます。

時間軸の設定

時間軸の設定については、次の記事で別途解説しています。

数値やラベルの軸とは、設定方法が異なるので、こちらもチェックしてみてください。

≫ Matplotlib 時系列データの軸設定|自由に時間軸を設定!
Matplotlibで時系列データをプロットすると、自動で軸が時間軸になります。しかし、残念ながらデフォルト設定では、目盛り値が適切に表示できない場合が多々あります。この記事では時系列データの軸設定について、①時系列データの軸目盛の自動調整方法、②表示期間の指定方法、③`Formatter`, `Locator`を使用した任意の目盛り設定方法。このあたりを抑えれば、時間軸目盛りがある程度自由にできるようになってきます。
www.yutaka-note.com/entry/matplotlib_time_axis
 

軸周りの設定の前に…

まずは、Matplotlibの基本的なグラフの描き方を紹介します。

そもそもMatplotlibの使い方がよくわからないという方は、次の入門者用のわかりやすい解説記事がおススメです。

≫【初心者向け】Matplotlibの特徴と使い方をわかりやすく解説!
脱初心者のためのMatplotlibマスターガイドです。そもそもどういう流れでプロットするのか?どんな種類のグラフが描けるのか?日本語設定は?タイトルや軸の設定は?オブジェクト指向って何?そんな疑問を解決します!この記事で、脱Matplotlib初心者を目指そう!
www.yutaka-note.com/entry/matplotlib_guid
 

pltメソッドとオブジェクト指向

Matplotlibユーザーを混乱させている原因の一つが、

  • Matplotlibのグラフ絵画には2つのスタイルがある

という点です。

  1. pltメソッド:plt.plot()から始めて、plt.○○○を使用していく
  2. オブジェクト指向:fig, ax = plt.subplots()から始めて、ax.set_○○○を使用していく

(前者のpltメソッドは、1と2の区別をしやすいように私が命名しました。)

基本的には、次の使い分けをします。

  • pltメソッド ⇒ グラフを手軽に描く
  • オブジェクト指向 ⇒ グラフの詳細設定を行う

以下の解説では、pltメソッド、オブジェクト指向の両方のメソッドを併記しています。

自分で使用する方のメソッドをチェックしてみてくださいね。

ほとんどの場合、plt.○○○ax.set_○○○の「○○○部分は共通」です。
片方の方法を覚えれば、自然ともう一方も覚えられます!

pltメソッドの使い方を詳しく知りたい方は、こちらの記事も参考にしてください。

≫Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
Matplotlibのplt.plotを使用したグラフを作成、グラフの見た目変更、タイトルや軸の設定など基本事項について徹底解説!!この記事を読めば、plt.plotで手軽に手早く簡単に、キレイなグラフ作成可能に!?
www.yutaka-note.com/entry/matplotlib_pyplot
 

オブジェクト指向のスタート地点plt.subplots()については、次の記事で解説しています。

≫Matplotlib plt.subplots()の使い方|FigureとAxesを同時生成!
Matplotlibでグラフを描くとき「fig, ax = plt.subplots()って、よく見るけど何してるの?」「plt.subplots()の便利な使い方を知りたい! 」という方のために、plt.subplots()でFigureとAxesを作ると何が便利なのか、plt.subplots()の基本的な使い方、覚えておくと便利なplt.subplots()の引数をを図解付きで解説します!
www.yutaka-note.com/entry/matplotlib_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について詳しく知りたい方はこちらをチェック

≫Matplotlib inline の謎解明! |「書けと言われたので書いています」から卒業
Jupyter Notebookでmatplotlibを使用する場合には、インポートする前に%matplotlib inlineと記述します。なぜinlineと入力しているのでしょうか?この記事では、matplotlib inlineの謎について解説していきたいと思います!
www.yutaka-note.com/entry/matplotlib_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()

グラフに軸ラベルが表示されています。

軸ラベルに日本語を使用したい場合は、特別な設定が必要になります。

≫Matplotlib 日本語の表示方法 厳選3選|最適な方法選んで!
Matplotlibでグラフを描くとき、「日本語を表示しようとしたら文字化けした!」「日本語を表示するには、何を設定すればいいの?」という方向けに、「Matplotlibで日本語を表示する方法厳選3選」、「使用できるフォントのチェック方法」を紹介していきます。追加のインストールなしで、フォントの設定を変更するだけの方法を紹介します!
www.yutaka-note.com/entry/matplotlib_japanese
 

軸ラベルの見た目変更

オプション引数で軸ラベルの位置や見た目を調整できます。

キーワード 略称 設定内容 設定値の例
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()

軸ラベルの見た目が変更されています。

  • テキスト、色の設定について詳しく知りたい方はこちらをチェック!
≫Matplotlib plt.textよく使うもの徹底解説|テキスト表示をマスター!
グラフ内にテキストでコメントを記入することってよくありますよね?グラフにコメントがあると、グラフの大事な部分を強調して説明できます。この記事では、matplotlibでグラフ内にテキストを表示する方法、テキストの見た目の変更方法について図解・サンプルコード付きで解説しています!
www.yutaka-note.com/entry/2020/01/08/080413
 
≫Matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説
伝わるグラフを作るためのポイントはなんでしょうか?いかに視覚的にわかりやすいか、これが大切です。それには重要な要素に色をつけて、視覚的にうったえることが超大切!この記事では、matplotlibでの色の指定方法について、基本から応用まで徹底解説!
www.yutaka-note.com/entry/matplotlib_color
 

軸の最大値・最小値の設定

軸の最大値・最小値を変更した場合は、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()の詳しい使い方は、こちらの記事をチェックしてください。

≫NumPy arange|等間隔の数列を生成する方法をサンプルコード・図解で解説!
NumPyのarangeを使用して等間隔の数列を生成する方法を解説しています。arangeには「3つの引数の渡し方」があるのを知っていましたか?数列の始点、終点、間隔を設定する方法をサンプルコード、図解付きで徹底解説!
www.yutaka-note.com/entry/numpy_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軸のみ補助目盛を表示する場合には、LocatorFormatterなどを使用しますが、ここでは割愛します。

目盛り線の表示・設定

デフォルトでは目盛り線は非表示になっています。

目盛り線を表示するには、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(完全透明)~(不透明)
linewidth lw 線の太さ 数値ptで指定
linestyle ls 線のスタイル -, --, -., :, で指定

目盛り線を灰色の点線で表示してみます。

plt.plot(x, y)
 
plt.grid(color = "gray", linestyle="--")
 
plt.show()

目盛り線の見た目が変更されています。

  • 色の設定について詳しく知りたい方はこちらをチェック!
≫Matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説
伝わるグラフを作るためのポイントはなんでしょうか?いかに視覚的にわかりやすいか、これが大切です。それには重要な要素に色をつけて、視覚的にうったえることが超大切!この記事では、matplotlibでの色の指定方法について、基本から応用まで徹底解説!
www.yutaka-note.com/entry/matplotlib_color
 

軸周りの設定総まとめ

今回紹介した軸周りの設定を全体的に適用した例を紹介します。

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 plt.legend() | 凡例の位置とスタイル設定完璧ガイド!
Matplotlibでは、デフォルトでは凡例は表示されません。「凡例(legend)を表示するにはどうしたらいいの?!」「凡例の位置や見た目の設定方法がわからない!」という方向けに、「凡例を表示する関数plt.legend()の使い方」「引数で位置や見た目を簡単に設定する方法」を紹介していきます。自分の作りたい凡例を作れるようになりましょう!
www.yutaka-note.com/entry/matplotlib_legend
 

オススメ|matplotlibとデータ分析の勉強方法

今回は、Matplotlibの軸・目盛り・目盛り線の設定について基本的なものを解説しました。

matplotlibは奥の深いモジュールですが、なかなかわかりにくい部分もあります…。

そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。

≫【初心者向け】Matplotlibの特徴と使い方をわかりやすく解説!
脱初心者のためのMatplotlibマスターガイドです。そもそもどういう流れでプロットするのか?どんな種類のグラフが描けるのか?日本語設定は?タイトルや軸の設定は?オブジェクト指向って何?そんな疑問を解決します!この記事で、脱Matplotlib初心者を目指そう!
www.yutaka-note.com/entry/matplotlib_guid
 

また、データ分析初心者の方にはこちらの記事もおススメです。

私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。

何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。

≫独学でデータ分析を勉強するオススメ学習本
独学でのpythonデータ分析勉強に役立ったおススメ書籍を紹介していきます。業務でそれなりにデータ分析を行えるまで、いろいろな試行錯誤をしてきましたが、もし自分が今ゼロから勉強する立場ならどうするのがいいのか考えてみました。以下では、入門書、個別モジュール用、実践用の3つの視点でおススメ本を紹介していきます。
www.yutaka-note.com/entry/data_analysis