【python】matplotlibでグラフ軸を設定する方法

この記事ではmatplotlibライブラリでグラフ軸を設定する方法をわかりやすく解説します。

サンプルコードをコピペしながらサクサク処理を試せますので、 ぜひ活用してみてください。


matplotlibライブラリを使ったグラフの描画方法はこちらを参考してみてください。


目次

基本的なグラフ軸

まずはmatplolibのグラフ描画におけるデフォルトのグラフ軸を確認しましょう。

import numpy as np
import matplotlib.pyplot as plt

color_list = ["r", "b", "g", "y", "m", "c", "k"]
x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

# グラフを表示
plt.show()

デフォルトの軸設定では、特別な指定なしで自動的に適切な軸を描画してくれます。


軸設定の概要

以降ではグラフの軸ラベル、軸の最大・最小値、軸の目盛値・目盛線に分けて解説します。

軸ラベルの設定
軸の目盛値の設定
軸の最大・最小値の設定
軸の目盛線の設定

軸ラベルを指定

matplotlibでグラフにそれぞれ軸ラベルを追加するにはx軸、y軸でそれぞれ、

  • plt.xlabel(x軸のラベル名)
  • plt.ylabel(y軸のラベル名)

を指定します。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)

n = 0
color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

# 軸ラベルを追加
plt.xlabel("横軸ラベル", fontsize=15)
plt.ylabel("縦軸ラベル", fontsize=15)

# グラフを表示
plt.show()

軸ラベルを指定して、軸名を表記することができました。

軸ラベルの設定で「日本語表記が文字化けしてしまう!!」という方はこちらで解決できます。


軸ラベルの詳細設定

xlabel(), ylabel()メソッドには軸ラベルの見た目を変更するための引数が用意されています。

スクロールできます
引数名意味指定する値の例
fontsize
(もしくはsize)
文字の大きさ16, 12.5,
"xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large"
color
(もしくはc)
文字の色"r", "blue", "#00ffc8"など (指定可能な色はこちらで確認できます)
fontweight
(もしくはweight)
文字の太さ"normal", "bold"
fontstyle
(もしくはstyle)
文字の字体"italic"
loc軸ラベルの配置xlabel() : "left", "center", "right"
ylabel() : "bottom", "center", "top"
labelpad軸ラベル領域の余白-3, 0, 1.5 (大きいほど軸から離れる)
rotation文字の角度"vertical", "horizontal", 90, 30

軸ラベルの見た目を調整した場合の出力結果を確認してみましょう。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0
color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

# 軸ラベルの見た目を調整
plt.xlabel("横軸ラベル", fontsize=12, loc="right", rotation=10, labelpad=-3)
plt.ylabel("縦軸ラベル", fontsize=18, loc="top", color="#00bbff")

# グラフを表示
plt.show()
デフォルト
見た目を調整後

上図のようにデフォルトの見た目を変更することができます。


軸の最大・最小値を指定

軸の最大・最小値を指定して軸の範囲を変更することができます。

軸の範囲を設定するにはx軸、y軸でそれぞれ

  • plt.xlim(軸の最小値, 軸の最大値)
  • plt.ylim(軸の最小値, 軸の最大値)

のように指定します。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

# 軸の最大・最小値を指定
plt.xlim(-2*np.pi, 4*np.pi)
plt.ylim(-5, 12)

# グラフを表示
plt.show()

x軸, y軸ともに軸の範囲を変更することができました。


軸目盛の値を指定

軸目盛の値の表示を任意の値に変更可能です。

軸目盛の値の間隔を調節したり、文字列で軸目盛の値を表示することができます。

目盛の間隔を指定

軸目盛の表示はx軸, y軸でそれぞれ

  • plt.xticks([目盛値の配列])
  • plt.yticks([目盛値の配列])

のように指定します。[目盛値の配列]で任意の間隔を指定することができます。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

# x軸を0〜7まで0.5刻みで表示
plt.xticks(np.arange(0, 7, 0.5))
# y軸を0〜8まで3刻みで表示
plt.yticks(range(0, 8, 3))

# グラフを表示
plt.show()
デフォルト
目盛の間隔を変更

目盛を文字列で表示

軸目盛の値を文字列で表示するには、x軸, y軸それぞれで

  • plt.xticks([目盛値の配列], [表示する文字列の配列])
  • plt.yticks([目盛値の配列], [表示する文字列の配列])

のように指定します。ここで引数に指定する配列には注意点があります。

[ 目盛値の配列 ][ 表示する文字列の配列 ] は配列の大きさ(要素数)を同じにする。

[目盛値の配列][表示する文字列の配列]配列の大きさが異なるとエラーとなります。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

# 軸目盛を文字列で表示
plt.xticks(
    [0, np.pi/4, np.pi/2, np.pi*3/4, np.pi, np.pi*5/4, np.pi*3/2, np.pi*7/4, np.pi*2], 
    ["0", "\u03c0/4", "\u03c0/2", "3\u03c0/4", "\u03c0", "5\u03c0/4", "3\u03c0/2", "7\u03c0/4", "2\u03c0"]
)
plt.yticks([0, 3, 6], ["A", "B", "C"])

# グラフを表示
plt.show()

このように軸目盛の値の間隔を変更したり、値を文字列で表示させることができます。

πはUnicode文字"\u03c"で表します。


軸目盛を非表示

軸目盛を非表示にする場合は、x軸, y軸それぞれで

  • xticks([])
  • yticks([])

のように、引数に空のリストを指定します。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

# 軸目盛を非表示
plt.xticks([])
plt.yticks([])

# グラフを表示
plt.show()

軸目盛を非表示にすることができました。


補助目盛を追加

グラフに補助目盛を追加するにはplt.minorticks_on()メソッドを使用します。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

plt.xticks(
    [0, np.pi/4, np.pi/2, np.pi*3/4, np.pi, np.pi*5/4, np.pi*3/2, np.pi*7/4, np.pi*2], 
    ["0", "\u03c0/4", "\u03c0/2", "3\u03c0/4", "\u03c0", "5\u03c0/4", "3\u03c0/2", "7\u03c0/4", "2\u03c0"]
)

# 補助目盛を追加
plt.minorticks_on()

# グラフを表示
plt.show()
デフォルト(補助目盛なし)
補助目盛を追加

このように軸目盛に補助目盛が追加されました。


グラフ内に軸の目盛線を表示

軸の目盛線は主目盛線、補助目盛線ともに描画することができます。

主目盛線を表示

グラフ内に軸の目盛線を表示するにはplt.grid()メソッドを使用します。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

plt.xticks(
    [0, np.pi/4, np.pi/2, np.pi*3/4, np.pi, np.pi*5/4, np.pi*3/2, np.pi*7/4, np.pi*2], 
    ["0", "\u03c0/4", "\u03c0/2", "3\u03c0/4", "\u03c0", "5\u03c0/4", "3\u03c0/2", "7\u03c0/4", "2\u03c0"]
)
# 目盛線を表示
plt.grid()

# グラフを表示
plt.show()

このように目盛値に沿ってグラフ内に目盛線を描画することができます。


x軸もしくはy軸だけに目盛線を表示

目盛線をx軸もしくはy軸だけの片方だけに描画することができます。

plt.grid()メソッドの引数axis"x"もしくは"y"を指定して、指定した軸にのみ目盛線を描画します。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

plt.xticks(
    [0, np.pi/4, np.pi/2, np.pi*3/4, np.pi, np.pi*5/4, np.pi*3/2, np.pi*7/4, np.pi*2], 
    ["0", "\u03c0/4", "\u03c0/2", "3\u03c0/4", "\u03c0", "5\u03c0/4", "3\u03c0/2", "7\u03c0/4", "2\u03c0"]
)
# 片方の軸にのみ目盛線を表示
plt.grid(axis="x")
# グラフを表示
plt.show()
x軸にのみ目盛線を表示
y軸にのみ目盛線を表示

このように片方の軸にだけ目盛線を引くことができます。


補助目盛線を追加

グラフ内に補助目盛線を描画するには、plt.minorticks_on()メソッドを適用した状態で

plt.grid()メソッドの引数which"both"を指定します。

import numpy as np
import matplotlib.pyplot as plt
import random

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

plt.xticks(
    [0, np.pi/4, np.pi/2, np.pi*3/4, np.pi, np.pi*5/4, np.pi*3/2, np.pi*7/4, np.pi*2], 
    ["0", "\u03c0/4", "\u03c0/2", "3\u03c0/4", "\u03c0", "5\u03c0/4", "3\u03c0/2", "7\u03c0/4", "2\u03c0"]
)
# 補助目盛を追加
plt.minorticks_on()

# 主目盛線と補助目盛線を表示
plt.grid(which="both")

# グラフを表示
plt.show()

このように主目盛線に加えて補助目盛線を描画することができます。


主目盛線・補助目盛線の描画選択

上記では主目盛線に補助目盛線を追加するかたちで描画しましたが、補助目盛線のみを描画することもできます。

また、x軸, y軸のどちらか一方にのみ描画することもできます。

以上を踏まえるとplt.grid()メソッドの引数axisと引数whichの組み合わせと出力結果は下図の通りです。

このマトリックスから描画したい目盛線を選ぶことができます。


対数目盛に変更

軸目盛を線形目盛から対数目盛に変更することができます。

対数目盛を使用するにはx軸, y軸でそれぞれ

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

を指定します。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1, 5)
y = [10**a for a in list(x)]

plt.plot(x, y, color="k", label="$y=10^{x}$")

# # 補助目盛を追加
plt.minorticks_on()
# 目盛線を表示
plt.grid()

# 凡例を表示
plt.legend(fontsize=16)

# y軸を対数軸に変更
plt.yscale("log")

# グラフを表示
plt.show()
デフォルト(線形軸)
y軸を対数軸に変更

このように線形目盛を対数目盛に変更することができます。


軸の目盛線の見た目を指定

軸の目盛線の見た目を細かく設定することができます。

目盛線の見た目を調整するplt.grid()メソッドの代表的な引数は以下の通りです。

引数名意味指定する値の例
color
(もしくはc)
線の色"r", "blue", "#00ffc8"など
(指定可能な色はこちらで確認できます)
alpha線の透明度0(完全透明)〜1(不透明)の数値
linewidth線の太さ12, 10.5など(float型)
linestyle線のスタイル"-", "--", "-.", ":"
("solid", "dashed", "dashdot", "dotted"
でも可)

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*2)
y = np.sin(x)
n = 0

color_list = ["r", "b", "g", "y", "m", "c", "k"]
for color in color_list:
    plt.plot(x, y+n, color=color)
    n += 1

# 軸ラベルを追加
plt.xlabel("時間t", fontsize=14)
plt.ylabel("y=sin(t)", fontsize=14)

# x軸の値を指定
plt.xticks(
    [0, np.pi/4, np.pi/2, np.pi*3/4, np.pi, np.pi*5/4, np.pi*3/2, np.pi*7/4, np.pi*2], 
    ["0", "\u03c0/4", "\u03c0/2", "3\u03c0/4", "\u03c0", "5\u03c0/4", "3\u03c0/2", "7\u03c0/4", "2\u03c0"]
)
# 補助目盛を追加
plt.minorticks_on()

# 目盛線の見た目を指定
plt.grid(color="#00ffc8", alpha=0.5, linestyle="--", axis="both", which="minor")
plt.grid(axis="both", which="major")
# グラフを表示
plt.show()

軸の設定を細かく指定すれば、このようなグラフを描画することができます。


まとめ

今回はmatplotlibライブラリでグラフ軸を設定する方法を具体的に紹介しました。

他にもmatplotlibライブラリの記事がありますので、よろしければ参考にしてみてください。

よかったらシェアしてね!
目次