Pythonでデータ処理を行った結果を簡単にグラフに出力したいと思ったことはありませんか?
この記事では、初心者の方向けに、matplotlibパッケージの使い方を折れ線グラフの描画を例に丁寧に解説していきます。
ワンステップずつコードを解説しているのでどなたでもmatplotlibパッケージの基礎が習得できます!
是非、この機会にmatplotlibパッケージを使った折れ線グラフにトライしてみましょう。
準備
Pythonの実行環境の構築やmatplotlibパッケージのインストールがまだの方は以下の記事を参考にしてPythonの実行環境の構築とmatplotlibパッケージのインストールを済ませてください。
シンプルな例
最初に、一番シンプルな例でmatplotlibパッケージの使い方を解説していきます。
全体のコード
上記グラフを作成するためのコードは以下になります。
# パッケージをインポートする。
import numpy as np
import matplotlib.pyplot as plt
# Figureを作成する。
fig = plt.figure()
# Axesを作成する。
ax = fig.add_subplot(111)
# データを用意する。
x = np.arange(-360 * 2, 360 * 2, 15)
s = np.sin(x * np.pi / 180)
c = np.cos(x * np.pi / 180)
# データを描画する。
ax.plot(x, s)
ax.plot(x, c)
# グラフを表示する。
plt.show()
ここでは、\(\sin\)関数と\(\cos\)関数の折れ線グラフを作成しています。上記のコードだけでグラフを作成することができます。なんと、描画用のデータを用意できればその後わずか3行でグラフを作成できます。簡単ですね。以下では、上記のコードをワンステップずつ解説していきます。
各部のコード
パッケージのインポート
# パッケージをインポートする。
import numpy as np
import matplotlib.pyplot as plt
必要なパッケージとモジュールをインポートしています。ここでは、数値計算のためのnumpyパッケージと、グラフ描画のためのpyplotモジュールをインポートしています。
FigureとAxesの作成
# Figureを作成する。
fig = plt.figure()
# Axesを作成する。
ax = fig.add_subplot(111)
グラフを描画するためには、最初にFigureとAxesを作成する必要があります。6行目でFigureを作成し、8行目でAxesを作成しています。Figureはグラフを貼るための台紙で、Axesはグラフ本体といったイメージです。
データの用意
# データを用意する。
x = np.arange(-360 * 2, 360 * 2, 15)
s = np.sin(x * np.pi / 180)
c = np.cos(x * np.pi / 180)
グラフに描画するデータを用意しています。関数の定義域は、-720から720までの値を15ごとに用意し変数xへ代入しています。関数の値は、\(\sin\)関数と\(\cos\)関数それぞれ計算値を用意し変数sとcへ代入しています。このデータを自身で用意したデータに置き換えることで自身のグラフを作成することができます。なお、xの単位は「度」です。
データの描画
# データを描画する。
ax.plot(x, s)
ax.plot(x, c)
データを描画しています。Axesクラスのplotメソッドに関数の定義域を変数xで与え、\(\sin\)関数と\(\cos\)関数それぞれの値を変数sとcで与えています。
グラフの表示
# グラフを表示する。
plt.show()
最後に、グラフを表示しています。たったこれだけで\(\sin\)関数と\(\cos\)関数のグラフが描画できます。
カスタマイズした例
次にカスタマイズした例を解説していきます。
全体のコード
上記グラフを作成するためのコードは以下になります。
前章と同じく、\(\sin\)関数と\(\cos\)関数のグラフを描画しています。前章の例では、グラフのタイトルや軸のラベルがなく、軸の目盛などは自動で計算されたものでした。次節以降で、これらをカスタマイズしたときのコードをワンステップずつ解説していきます。
# パッケージをインポートする。
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import rcParams as rcp
# Figureを作成する。
fig = plt.figure()
# Axesを作成する。
ax = fig.add_subplot(111)
# データを用意する。
x = np.arange(-360 * 2, 360 * 2, 15)
s = np.sin(x * np.pi / 180)
c = np.cos(x * np.pi / 180)
# データを描画する。
plot_s = ax.plot(x, s)[0]
plot_c = ax.plot(x, c)[0]
# フォントを設定する。
rcp['font.family'] = 'sans-serif'
rcp['font.sans-serif'] = ['Hiragino Maru Gothic Pro', 'Yu Gothic', 'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'VL PGothic', 'Noto Sans CJK JP']
# 系列のラベルを設定する。
plot_s.set_label("sin")
plot_c.set_label("cos")
# 線の種類を設定する。
plot_s.set_linestyle("-")
plot_c.set_linestyle("-")
# 線の太さを設定する。
plot_s.set_linewidth(1)
plot_c.set_linewidth(1)
# 線の色を設定する。
plot_s.set_color("red")
plot_c.set_color("blue")
# マーカの種類を設定する。
plot_s.set_marker("o")
plot_c.set_marker("s")
# マーカのサイズを設定する。
plot_s.set_markersize(2)
plot_c.set_markersize(2)
# マーカの色を設定する。
plot_s.set_markerfacecolor("red")
plot_c.set_markerfacecolor("blue")
# マーカの縁の色を設定する。
plot_s.set_markeredgecolor("red")
plot_c.set_markeredgecolor("blue")
# Figureの解像度と色を設定する。
fig.set_dpi(130)
fig.set_facecolor("whitesmoke")
# Axesのタイトルと色を設定する。
ax.set_title("sinとcos")
ax.set_facecolor("whitesmoke")
# x軸とy軸のラベルを設定する。
ax.set_xlabel("x")
ax.set_ylabel("y")
# x軸の範囲を設定する。
ax.set_xlim(-360 * 2.5, 360 * 2.5)
# x軸の目盛の位置とラベルとサイズを設定する。
ax.xaxis.set_major_locator(mpl.ticker.MultipleLocator(180))
ax.xaxis.set_major_formatter(mpl.ticker.StrMethodFormatter("{x:.0f}"))
ax.tick_params(axis='x', which='major', labelsize=8)
# x軸の補助目盛の位置とラベルとサイズを設定する。
ax.xaxis.set_minor_locator(mpl.ticker.MultipleLocator(90))
ax.xaxis.set_minor_formatter(mpl.ticker.StrMethodFormatter("{x:.0f}"))
ax.tick_params(axis='x', which='minor', labelsize=7)
# y軸の範囲を設定する。
ax.set_ylim(-2.0, 2.0)
# y軸の目盛の位置とラベルとサイズを設定する。
ax.yaxis.set_major_locator(mpl.ticker.MultipleLocator(1.0))
ax.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter("{x:.1f}"))
ax.tick_params(axis='y', which='major', labelsize=8)
# y軸の補助目盛の位置とラベルとサイズを設定する。
ax.yaxis.set_minor_locator(mpl.ticker.MultipleLocator(.5))
ax.yaxis.set_minor_formatter(mpl.ticker.StrMethodFormatter("{x:.1f}"))
ax.tick_params(axis='y', which='minor', labelsize=7)
# データ値を表示する。
ax.text(x[6], s[6], "{:.2f}".format(s[6]), fontsize=8)
ax.text(x[6], c[6], "{:.2f}".format(c[6]), fontsize=8)
# グリッドを表示する。
ax.grid(True, "major", linestyle="-", linewidth=.7)
ax.grid(True, "minor", linestyle="--", linewidth=.3)
# 凡例を表示する。
ax.legend(loc="upper left")
# グラフを表示する。
plt.show()
各部のコード
パッケージのインポート
# パッケージをインポートする。
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import rcParams as rcp
必要なパッケージとモジュールをインポートしています。ここでは、前章でインポートしたnumpyパッケージとpyplotモジュールに加え、グラフ描画のためのmatplotlibパッケージと日本語を表示するためにrcParamsモジュールをインポートしています。
前章のコードと共通なコード
# Figureを作成する。
fig = plt.figure()
# Axesを作成する。
ax = fig.add_subplot(111)
# データを用意する。
x = np.arange(-360 * 2, 360 * 2, 15)
s = np.sin(x * np.pi / 180)
c = np.cos(x * np.pi / 180)
# データを描画する。
plot_s = ax.plot(x, s)[0]
plot_c = ax.plot(x, c)[0]
この部分のコードは前章のコードとほぼ同じです。違いは、データを描画するAxesクラスのplotメソッドの返り値を変数plot_sとplot_cに格納しているところだけです。変数plot_sとplot_cはこの後で使います。
日本語フォントの設定
# フォントを設定する。
rcp['font.family'] = 'sans-serif'
rcp['font.sans-serif'] = ['Hiragino Maru Gothic Pro', 'Yu Gothic', 'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'VL PGothic', 'Noto Sans CJK JP']
日本語を表示するためのフォントを設定しています。以下のyniji様の記事を参考にさせていただきました。上記コードを挿入するだけでグラフの中に日本語を表示することができるようになります。
データ系列のラベル
# 系列のラベルを設定する。
plot_s.set_label("sin")
plot_c.set_label("cos")
変数plot_sとplot_cを使って各データ系列それぞれにラベル「sin」と「cos」を設定しています。ここで設定した値がこの後で説明する凡例で表示されることになります。
線の種類
# 線の種類を設定する。
plot_s.set_linestyle("-")
plot_c.set_linestyle("-")
各データ系列を描画する際の線の種類を設定しています。ここでは、各データ系列とも「-」(実線)を指定しています。他の選択肢は、以下のページに掲載されています。実線の他に点線や破線や一点鎖線を選択することができます。
線の太さ
# 線の太さを設定する。
plot_s.set_linewidth(1)
plot_c.set_linewidth(1)
各データ系列を描画する際の線の太さを設定しています。ここでは、各データ系列とも「1」を指定しています。
線の色
# 線の色を設定する。
plot_s.set_color("red")
plot_c.set_color("blue")
各データ系列を描画する際の線の色を設定しています。ここでは、各データ系列それぞれに「red」(赤)と「blue」(青)を指定しています。
グラフを構成する各部位の色の選択肢は以下のページに掲載されています。
マーカーの種類
# マーカの種類を設定する。
plot_s.set_marker("o")
plot_c.set_marker("s")
各データ系列を描画する際のマーカーの種類を設定しています。ここでは、各データ系列それぞれに「o」(丸)と「s」(四角)を指定しています。他の選択肢は、以下のページに掲載されています。全部で40種類前後のマーカーを選択することができます。
マーカーのサイズ
# マーカのサイズを設定する。
plot_s.set_markersize(2)
plot_c.set_markersize(2)
各データ系列を描画する際のマーカーのサイズを設定しています。ここでは、各データ系列とも「2」を指定しています。
マーカーの色
# マーカの色を設定する。
plot_s.set_markerfacecolor("red")
plot_c.set_markerfacecolor("blue")
各データ系列を描画する際のマーカーの色を設定しています。ここでは、各データ系列それぞれに「red」(赤)と「blue」(青)を指定しています。データ系列の線の色の場合と同様にいろいろな色を選択することができます。
マーカーの縁の色
# マーカの縁の色を設定する。
plot_s.set_markeredgecolor("red")
plot_c.set_markeredgecolor("blue")
各データ系列を描画する際のマーカーの縁の色を設定しています。ここでは、各データ系列それぞれに「red」(赤)と「blue」(青)を指定しています。データ系列の線の色の場合と同様にいろいろな色を選択することができます。
Figureの解像度と色
# Figureの解像度と色を設定する。
fig.set_dpi(130)
fig.set_facecolor("whitesmoke")
Figure(台紙です)の解像度(DPI)と色を設定してます。ここでは、Figure(台紙です)の解像度(DPI)に「130」を設定し、色に「whitesmoke」(Whitesmoke)を指定しています。データ系列の線の色の場合と同様にいろいろな色を選択することができます。
Axesのタイトルと色
# Axesのタイトルと色を設定する。
ax.set_title("sinとcos")
ax.set_facecolor("whitesmoke")
Axes(グラフ本体です)のタイトルと色を設定しています。ここでは、Axes(グラフ本体です)のタイトルに「sinとcos」を設定し、色に「whitesmoke」(Whitesmoke)を指定しています。データ系列の線の色の場合と同様にいろいろな色を選択することができます。
x軸とy軸のラベル
# x軸とy軸のラベルを設定する。
ax.set_xlabel("x")
ax.set_ylabel("y")
\(x\)軸と\(y\)軸のラベルを設定しています。ここでは、\(x\)軸のラベルに「x」を、\(y\)軸のラベルに「y」を設定しています。
x軸の範囲
# x軸の範囲を設定する。
ax.set_xlim(-360 * 2.5, 360 * 2.5)
\(x\)軸の範囲を設定しています。ここでは、\(x\)軸の範囲に「-900から900」を設定しています。
x軸の目盛の位置とラベルとサイズ
# x軸の目盛の位置とラベルとサイズを設定する。
ax.xaxis.set_major_locator(mpl.ticker.MultipleLocator(180))
ax.xaxis.set_major_formatter(mpl.ticker.StrMethodFormatter("{x:.0f}"))
ax.tick_params(axis='x', which='major', labelsize=8)
\(x\)軸の目盛の位置とラベルとサイズを設定しています。ここでは、\(x\)軸の目盛の位置をMultipleLocatorというロケータを使って「180」ごとに、ラベルをStrMethodFormatterというフォーマッタを使って「少数点以下0桁」に、サイズを「8」で表示するよう設定しています。
x軸の補助目盛の位置とラベルとサイズ
# x軸の補助目盛の位置とラベルとサイズを設定する。
ax.xaxis.set_minor_locator(mpl.ticker.MultipleLocator(90))
ax.xaxis.set_minor_formatter(mpl.ticker.StrMethodFormatter("{x:.0f}"))
ax.tick_params(axis='x', which='minor', labelsize=7)
\(x\)軸の補助目盛の位置とラベルとサイズを設定しています。ここでは、\(x\)軸の補助目盛の位置をMultipleLocatorというロケータを使って「90」ごとに、ラベルをStrMethodFormatterというフォーマッタを使って「少数点以下0桁」に、サイズを「7」で表示するよう設定しています。
y軸の範囲
# y軸の範囲を設定する。
ax.set_ylim(-2.0, 2.0)
\(y\)軸の範囲を設定しています。ここでは、\(y\)軸の範囲に「-2.0から2.0」を設定しています。
y軸の目盛の位置とラベルとサイズ
# y軸の目盛の位置とラベルとサイズを設定する。
ax.yaxis.set_major_locator(mpl.ticker.MultipleLocator(1.0))
ax.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter("{x:.1f}"))
ax.tick_params(axis='y', which='major', labelsize=8)
\(y\)軸の目盛の位置とラベルとサイズを設定しています。ここでは、\(y\)軸の目盛の位置をMultipleLocatorというロケータを使って「1.0」ごとに、ラベルをStrMethodFormatterというフォーマッタを使って「少数点以下1桁」に、サイズを「8」で表示するよう設定しています。
y軸の補助目盛の位置とラベルとサイズ
# y軸の補助目盛の位置とラベルとサイズを設定する。
ax.yaxis.set_minor_locator(mpl.ticker.MultipleLocator(.5))
ax.yaxis.set_minor_formatter(mpl.ticker.StrMethodFormatter("{x:.1f}"))
ax.tick_params(axis='y', which='minor', labelsize=7)
\(y\)軸の補助目盛の位置とラベルとサイズを設定しています。ここでは、\(y\)軸の補助目盛の位置をMultipleLocatorというロケータを使って「0.5」ごとに、ラベルをStrMethodFormatterというフォーマッタを使って「少数点以下1桁」に、サイズを「7」で表示するよう設定しています。
データ値
# データ値を表示する。
ax.text(x[6], s[6], "{:.2f}".format(s[6]), fontsize=8)
ax.text(x[6], c[6], "{:.2f}".format(c[6]), fontsize=8)
各データ系列の7番目のデータ値を「少数点以下2桁」フォントサイズ「8」でグラフ上に描画しています。このように、グラフ上の任意の座標に任意のテキストを描画することができます。
グリッド
# グリッドを表示する。
ax.grid(True, "major", linestyle="-", linewidth=.7)
ax.grid(True, "minor", linestyle="--", linewidth=.3)
\(x\)軸と\(y\)軸の目盛と補助目盛に対応したグリッド線を設定しています。ここでは、目盛に対応したグリッド線として「-」(実線)を太さ「0.7」で設定しています。また、補助目盛に対応したグリッド線として「--」(破線)を太さ「0.3」で設定しています。グリッド線の種類は、データ系列の線の種類の場合と同様にいくつかの種類を選択することができます。
凡例
# 凡例を表示する。
ax.legend(loc="upper left")
凡例を設定しています。ここでは、凡例の位置として「upper left」(左上)を指定しています。凡例の位置は、「upper left」(左上)以外にもいろいろ選択できます。他の選択肢は、以下のnkay様の記事が参考になります。
グラフの表示
# グラフを表示する。
plt.show()
最後に、グラフを表示しています。
作成したグラフの保存
作成したグラフは、表示された画面の左下に並んでいるボタンのうち保存ボタンをクリックすることで画像ファイルとして保存することができます。
以上、「Python初心者でも簡単!matplotlibの使い方を折れ線グラフで徹底解説」でした。
コメント