Pythonライブラリ講座

Matplotlib|pltでグラフを作ろう!初心者向け完全ガイド

前のページ|次のページ

19章ではMatplotlibの『pyplotインターフェースでグラフを作成・装飾する方法について解説します。

本記事を読めば、Matplotlibでグラフを作成する際の基礎を網羅的に学習することができます。

ぜひ最後まで読んでいってください!

本連載講座【Python ライブラリ編】では、データサイエンスに必要なPythonライブラリやその使い方を基礎から学ぶことができます。

NumPyPandasMatplotlibScipySeabornについて、初学者の方にも分かりやすいよう丁寧に解説しています。

さらに、学習した内容を定着させられるように各章演習問題を用意しています。

・Pythonでデータ分析ができるようになりたい

・Pythonの基礎事項は一通り学んだので、さらに深く学びたい

このように考えている方はTech Teacherが運営する【Python ライブラリ編】で、Pythonによるデータサイエンスの学習をすることをお勧めします!

なお、『Pythonについて全く知らない』・『Pythonの基礎事項がまだ分かっていない』という方は、まずコチラの【Python 基礎編】で基礎を一通り学習してからライブラリ編に取り掛かりましょう!

<ライブラリ編 目次>

<ライブラリの基礎>
1章:ライブラリとは

<NumPy>
2章:NumPyの概要と配列(ndarray)
3章:統計量や次元の取得/ソート
4章:配列のインデックス
5章:numpy.whereによる条件制御
6章:配列の結合/分割
7章:乱数

<SciPy>
8章:SciPyの概要と基本操作

<Pandas>
9章:SeriesDataFrame/統計量の取得
10章:データの読み込み/書き込み
11章:データの取り出し/追加
12章:データのソート
13章:データの結合
14章:階層型インデックス
15章:groupbyによる集計
16章:マッピング処理
17章:欠損値の扱い

<Matplotlib>
18章:Matplotlibの概要
19章:pyplotインターフェース
20章:オブジェクト指向インターフェース

<Seaborn>
21章:Seabornの概要と基本操作

pyplotインターフェースとは

Matplotlibでグラフを作成するには主に『pyplotインターフェース』を用いる方法、『オブジェクト指向インターフェース』を用いる方法の2つがあります。

本記事では『pyplotインターフェース』の使い方と関数について解説します。

もう一つのオブジェクト指向インターフェースでグラフを作成する方法は以下の記事で解説しています。

FigureやAxesを完全理解!Matplotlibでグラフを描こう 前のページ|次のページ 20章ではMatplotlibの『オブジェクト指向インターフェース』でグラフを作成・装飾する方法について...

pyplotインターフェース』はpyplotモジュールの関数を用いてグラフを作成する方法です。

科学技術計算やデータの可視化に特化したプログラミング言語である『MATLAB』を模したスタイルで簡単にグラフを書くことができます。

直感的かつ簡単にグラフを作成することができ、シンプルなグラフを素早く作成したいときに便利です。

【一覧】主に使用する関数

pyplotインターフェースでグラフを作成する際に用いる主な関数は以下の通りです。

関数作れるグラフ
plt.plot()関数や曲線のグラフ
plt.scatter()散布図
plt.bar()棒グラフ
plt.hist()ヒストグラム
plt.pie()円グラフ

また、グラフのレイアウトを決めたり、グラフを装飾したりするための主な関数は以下の通りです。

関数説明
plt.figure()グラフの大きさや背景の色を指定
plt.subplot()複数のグラフを並べて描画する
plt.title()グラフのタイトルを指定
plt.xlabel()x軸のラベルを指定
plt.ylabel()y軸のラベルを指定
plt.legend()凡例を表示
plt.grid()グリッドを表示

ここまでで紹介した関数などを用いて、グラフの作成や装飾を行っていきます。

他にもグラフの装飾などに関する様々な関数があります。

適宜、以下の公式ドキュメントで必要な時に調べて使用すると良いでしょう。

https://matplotlib.org/stable/api/pyplot_summary.html

グラフ作成の流れ

pyplotインターフェースでグラフを作成する際の基本的な流れは以下の通りです。

①:plt.figure()でグラフのサイズ・背景の色を指定
②:plt.plot()・plt.scatter()などの関数でグラフを作成
③:plt.title()・plt.legend()などの関数でグラフを装飾
④:plt.show()でグラフを表示

それでは実際にグラフを作成してみましょう。

今回はplt.plot()を用いてsin(x)のグラフを描画しています。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y = np.sin(x)

#プロット
plt.figure(figsize=(10,6))
plt.plot(x, y)
plt.show()
y=sin(x)のグラフ

この例ではplt.figure()の引数figsizeで図の縦横のサイズを指定しています。

なお、プログラム中で用いている『np.linspace()』については以下の記事で詳しく解説しています。

また、以下のようにして複数のグラフを1つの図に描くこともできます。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y1 = np.sin(x)
y2 = np.cos(x)

#プロット
plt.plot(x, y1)
plt.plot(x, y2)
plt.show()
y=sin(x), y=cos(x)のグラフ

グラフの装飾を行う関数

先ほど紹介した、グラフのレイアウトを決めたり、グラフを装飾したりするための関数について詳しく説明します。

関数説明
plt.figure()グラフの大きさや背景の色を指定
plt.subplot()複数のグラフを並べて描画する
plt.title()グラフのタイトルを指定
plt.xlabel()x軸のラベルを指定
plt.ylabel()y軸のラベルを指定
plt.legend()凡例を表示
plt.grid()グリッドを表示

plt.figure():グラフの大きさや背景の色を指定

plt.figure()』を最初に書き、引数でグラフの大きさや背景の色などを指定することができます。

以下の例では、plt.figure()の引数figsizeと引数facecolorでグラフの大きさと背景の色を変えています。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y = np.sin(x)

#plt.figure()でグラフの大きさ・背景の色を指定
plt.figure(figsize=(8, 4), facecolor='lightgray')
plt.plot(x, y)
plt.show()
大きさを指定したグラフ

なお、figsizeのデフォルト値は(6.4, 4.8)、facecolorのデフォルト値は’white’となっています。

また、グラフの大きさや背景の色などを変えなくてもよい場合はplt.figure()を省略することもできます。

plt.subplot():複数のグラフを並べて描画

plt.subplot()』を用いると、複数のグラフを縦横に並べて描画することができます。

各グラフを作成する前に「plt.subplot(縦に並べる個数, 横に並べる個数, 何番目のグラフか)」を書きます。

以下の例では、1つの図に2×2のプロットを作成し、それぞれに別のグラフを描画しています。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(2*x)
y4 = np.cos(2*x)

#plt.subplot()で複数のグラフを並べて作成
#2行2列の形で並ぶグラフの1つ目を作成
plt.subplot(2, 2, 1)
plt.plot(x, y1)

#2つ目のグラフを作成
plt.subplot(2, 2, 2)
plt.plot(x, y2)

#3つ目のグラフを作成
plt.subplot(2, 2, 3)
plt.plot(x, y3)

#4つ目のグラフを作成
plt.subplot(2, 2, 4)
plt.plot(x, y4)

#これまで作成した4つのグラフを表示
plt.show()
subplotを用いた複数グラフの表示

plt.subplot()の第三引数に渡すグラフの番号は、下図のように左上から右下にかけて1から順につけられます。

subplot 番号

plt.title():グラフのタイトルを指定

plt.title()』に文字列を渡すと、グラフのタイトルを指定することができます。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y = np.sin(x)

#plt.title()でタイトルを指定
plt.plot(x, y)
plt.title('sin(x)')
plt.show()
タイトル付きグラフ

Matplotlibでタイトルや軸ラベルを指定する場合、日本語を与えるとうまく表示されません。
日本語のタイトルや軸ラベルを付けたい場合、外部ライブラリをインストールしたりする必要があります。

plt.xlabel()/plt.ylabel():軸ラベルを指定

plt.xlabel()』や『plt.ylabel()』を用いて、x軸やy軸のラベルを指定することができます。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y = np.sin(x)

#plt.xlabel()/plt.ylabel()で軸ラベルを指定
plt.plot(x, y)
plt.xlabel('x label')
plt.ylabel('y label')
plt.show()
軸ラベル付きグラフ

plt.legend():凡例を表示

plt.legend()』を用いてグラフの凡例を表示させることができます。

1つの図に複数のグラフを描画するときなどに便利です。

凡例を表示するにはそれぞれのグラフにラベルを付ける必要があります。

以下の例では「plt.legend(ラベルのリスト)」としてラベルを付けていますが、plt.plot()などの引数labelでグラフ作成時にラベルを付けることもできます。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y1 = np.sin(x)
y2 = np.cos(x)

#plt.legend()で凡例を表示
plt.plot(x, y1)
plt.plot(x, y2)
plt.legend(['sin(x)', 'cos(x)'])
plt.show()
凡例付きグラフ

plt.legend()の引数locを用いて、凡例の位置を指定することができます。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y1 = np.sin(x)
y2 = np.cos(x)

#凡例の位置を'upper left'として指定
plt.plot(x, y1)
plt.plot(x, y2)
plt.legend(['sin(x)', 'cos(x)'], loc='upper left')
plt.show()
凡例の位置を指定したグラフ

plt.grid():グリッドを表示

plt.grid()』を用いると、グラフにグリッドを表示させることができます。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y = np.sin(x)

#plt.grid()でグリッドを表示
plt.plot(x, y)
plt.grid()
plt.show()
グリッド付きグラフ

さまざまなグラフを作成する関数

Matplotlibでさまざまなグラフを作成するための関数を紹介します。

関数作れるグラフ
plt.plot()関数や曲線のグラフ
plt.scatter()散布図
plt.bar()棒グラフ
plt.hist()ヒストグラム
plt.pie()円グラフ

plt.plot():関数や曲線のグラフ

plt.plot()』を用いると、関数や曲線のグラフを作成することができます。

x,yをそれぞれx軸方向,y軸方向のデータを表す配列とするとき、

plt.plot(x, y)

と書くことでデータをプロットすることができます。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y = np.sin(x)

#プロット
plt.plot(x, y)
plt.title('sin(x)')
plt.show()
plotによるy=sin(x)のグラフ

デフォルトでは折れ線でプロットした点を結びますが、第三引数以降でグラフの見た目を変更できます。

たとえば以下の例では、点を赤色の丸で表しています。

#プロットするデータ
x = np.linspace(-5, 5, 100)
y = np.sin(x)

#プロット
plt.plot(x, y, 'ro')
plt.title('sin(x)')
plt.show()
y=sin(x)のグラフ(赤丸プロット)

このほかにも様々なカスタマイズがあるので、以下の公式ドキュメントを参考にしながら色々試してみてください。

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot

plt.scatter():散布図

plt.scatter()』を用いると、散布図を作成することができます。

#プロットするデータ
x = np.random.rand(50)
y = np.random.rand(50)

#散布図
plt.scatter(x, y)
plt.show()
散布図

こちらの関数も引数を用いて見た目をカスタマイズすることができます。

#プロットするデータ
x = np.random.rand(50)
y = np.random.rand(50)

#散布図
plt.scatter(x, y, s=100, marker='+')
plt.show()
カスタムした散布図

plt.scatter()の引数の詳細設定については以下の公式ドキュメントを参照してください。

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter

plt.bar():棒グラフ

plt.bar()』を用いると棒グラフを作成することができます。

このとき、『plt.xticks()』を用いてそれぞれのグラフにラベルを付けることができます。

#プロットするデータ
x = np.array([1,2,3,4])
y = np.array([3,5,7,6])

#棒グラフ
plt.bar(x, y)
plt.xticks(x, ['A', 'B', 'C', 'D'])
plt.show()
棒グラフ

棒グラフは引数widthで幅を変更することができます。

#プロットするデータ
x = np.array([1,2,3,4])
y = np.array([3,5,7,6])

#棒グラフ
plt.bar(x, y, width=0.3)
plt.xticks(x, ['A', 'B', 'C', 'D'])
plt.show()
幅を指定した棒グラフ

その他引数の詳細設定については以下の公式ドキュメントを参照してください。

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar.html#matplotlib.pyplot.bar

plt.hist():ヒストグラム

plt.hist()』を用いると、ヒストグラムを作成することができます。

#プロットするデータ
x = np.random.randn(1000)

#ヒストグラム
plt.hist(x)
plt.show()
ヒストグラム

『plt.hist()』は引数bins分割の個数、引数rangex軸方向の表示範囲を設定することができます。

#プロットするデータ
x = np.random.randn(1000)

#ヒストグラム
plt.hist(x, bins=30, range=(-5, 5))
plt.show()
カスタムしたヒストグラム

その他引数の詳細については以下の公式ドキュメントを参照してください。

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist

plt.pie():円グラフ

plt.pie()』を用いると円グラフを作成することができます。

#データ
r = [5,10,15,20]

#円グラフ
plt.pie(r)
plt.show()
円グラフ

また、引数labelsラベル付け、引数counterclock描画方向、引数startangle開始位置の設定ができます。

以下の例ではラベル付けを行い、「counterclock=False」として描画方向を時計回りに設定しています。

また、「startangle=90」として開始位置を真上に設定しています。

#データとラベル
r = [5,10,15,20]
labels = ['A', 'B', 'C', 'D']

#円グラフ
plt.pie(r, labels=labels, counterclock=False, startangle=90)
plt.show()

カスタムした円グラフ

引数startangleは「右から指定した角度だけ反時計回りに回転した位置」を開始位置とします。

円グラフの開始位置

その他引数の詳細については以下の公式ドキュメントを参照してください。

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html#matplotlib.pyplot.pie

まとめ

いかがだったでしょうか。

本記事ではMatplotlibの『pyplotインターフェース』でグラフを作成・装飾する方法について解説しました。

ここまで紹介した関数はデータの可視化において特に重要なものです。

引数の細かい設定などは紹介しきれませんでしたが、ぜひ手を動かしながら色々試してみてください。

次章では『オブジェクト指向インターフェース』を用いる方法を紹介します。

いずれの方法にもメリット・デメリットがありますので、両方習得して場合に応じて使い分けられるようになりましょう!

次のページへ

FigureやAxesを完全理解!Matplotlibでグラフを描こう 前のページ|次のページ 20章ではMatplotlibの『オブジェクト指向インターフェース』でグラフを作成・装飾する方法について...