Python

最終更新日: 2023.03.31 (公開: 2023.03.31)

PythonのMatplotlibでデータを可視化!使い方やテクニックを解説

PythonのMatplotlibでデータを可視化!使い方やテクニックを解説

Pythonの「Matplotlib」は、データをグラフ形式で可視化するためのライブラリです。近年では、さまざまな場面で「データの利活用」が重要になっており、情報をわかりやすく示すことが求められています。しかし、Pythonでゼロからグラフを作成するのは困難です。

そこで役立つのが、今回ご紹介するMatplotlibです。Matplotlibを活用すると、データを用意してメソッドを呼び出すだけで、あらゆる形式のグラフを描画できます。代表的なグラフの作成方法や、各メソッドの使い方を理解しておけば、データの可視化に困ることはないでしょう。

この記事では、PythonのMatplotlibの使い方や応用テクニックについて解説します。サンプルコードも合わせてご紹介するので、ぜひ参考にしてみてください。

目次

Pythonの「Matplotlib」とは

Pythonの「Matplotlib」とは

「Matplotlib」とは、Pythonでグラフを描画するためのライブラリです。単純なソースコードを書くだけで、あらゆる種類・形状のグラフを描画できます。専門知識がなくても複雑なデータを可視化できることが魅力で、さまざまな分野で活用されています。

また、科学計算用のライブラリである「NumPy」と組み合わせて、算出したデータを可視化するために使用されることも多いです。PyQtやwxPythonなど、一般的なGUIライブラリで開発したアプリに、グラフの描画機能を搭載するためにも使えます。

なお、NumPyは数値計算を効率的に行うためのライブラリです。行列やベクトルの演算に長けているという特性は、高度な画像処理において有利に働きます。さらに、NumPyの内部はC言語で実装されているため、非常に高速な動作が可能なことも魅力です。そのため、データの解析結果をわかりやすく表示したい場合は、「MatplotlibとNumPyの活用が必須」といっても過言ではありません。

Matplotlibの使い方【データを可視化できる】

Matplotlibの使い方【データを可視化できる】

Matplotlibを活用すると、以下のようなグラフを表示できます。

  • 棒グラフ
  • 円グラフ
  • 折れ線グラフ
  • 散布図
  • ヒートマップ
  • ヒストグラム

棒グラフ

「棒グラフ」は、データの大小を棒の「高さ」もしくは「長さ」で表すグラフです。主に2つ以上の値を比較したり、値の大きな項目・小さな項目を比較するために使います。たとえば先進各国のGDPを比較するときは、左側から順番にアメリカ・中国・日本・ドイツ・インドと並び、棒の高さで各国のGDPを比較できます。

円グラフ

「円グラフ」は、ひとつの円を扇形に分割し、その大きさで構成比率を表すグラフです。円グラフは、全体に占める各要素の割合を比較するために使います。たとえば、血液型の割合を比較したいときは、円が大きい順にA型・O型・B型・AB型と並び、それぞれの円の大きさを比較することでその割合が視覚的にわかります。

折れ線グラフ

「折れ線グラフ」は、時系列ごとの連続的なデータの変化を表現するためのグラフです。横軸に年月といった時間を取り、縦軸にデータの値を取ることが一般的。折れ線グラフは、値の変化を視覚化するために使います。たとえば、日本のGDPの推移を比較するときは、横軸に年数・縦軸に各年のGDPを取ることでGDPの変化が理解できるでしょう。

散布図

「散布図」は、「点」でデータの量や大きさを示すグラフ。縦軸と横軸にそれぞれ異なる項目を取り、データが当てはまる場所に点を打つことが特徴です。散布図は、2つの量に関連性があるかどうかを調査するために使うものです。

たとえば、足の大きさと身長の関連性を調べたい場合は、一方の軸に足の大きさ・他方に身長を取り、対応する部分に点を打てば関連性がわかります。もし両者に関連性があるのなら、点が多く集まっている部分を線で結ぶと、右肩上がりのグラフが浮き彫りになります。

ヒートマップ

「ヒートマップ」は、色の濃淡でデータの強弱を表現するグラフです。データは縦軸と横軸の行列型になっており、その色によってデータのヒエラルキーがわかります。ヒートマップは、主にWebサイトのアクセス解析を行うために活用されています。たとえば、Webページにおけるユーザーの行動をヒートマップ化すれば「どの部分が多く読まれているか」を把握することが可能です。

ヒストグラム

「ヒストグラム」は、縦軸にデータの度数・横軸に階級を取る統計グラフです。ヒストグラムは、統計学や画像処理などの分野で、データの分布状況を視覚的に表現するために活用されています。たとえば、画像の「画素値」のヒストグラムを表示すると、「どの系統の色が多く使われているか」を把握できます。その情報を活用すれば、画像編集や加工がスムーズに行いやすくなるでしょう。

極座標グラフ

「極座標グラフ」は、円形のグリッド上にデータを表示するグラフ。極座標の大きな特徴は、原点からの距離と角度で平面上の点を示すことや、角度でデータの傾向を示すことです。たとえば、方向によるデータの変化量を示すなど、数学や統計の分野で極座標グラフが活用されています。

PythonのMatplotlibの導入方法

PythonのMatplotlibの導入方法

MatplotlibはPythonに標準で備わっている機能ではないため、使用前にあらかじめインストールしておく必要があります。まずは、Matplotlibとセットで使用することが多い「NumPy」をインストールするために、Pythonのアップデートを行いましょう。コマンドプロンプトを開いて、以下のPIPコマンドを入力してください。

py -m pip install –upgrade pip

上記のコマンドで、Pythonパッケージである「PIP」が最新バージョンにアップデートされると、次のように「Successfully installed pip」と表示されます。

そのうえで、以下のコマンドを入力すると、NumPyパッケージをインストールできます。

py -m pip install numpy

python matplotlib 導入

続いて、Matplotlibをインストールするために、以下のPIPコマンドを入力しましょう。

py -m pip install matplotlib

Matplotlibのインストールが完了すると、以下のような画面が表示されます。これで、Matplotlibが使えるようになります。

python matplotlib 導入

【基礎編1】PythonのMatplotlibでグラフを描画する方法

【基礎編1】PythonのMatplotlibでグラフを描画する方法

PythonのMatplotlibでグラフを表示するためには、matplotlibライブラリの「pyplotモジュール」に搭載されている、「plot()」と「show()」という関数を使用します。ここでは、以下の10個のポイントに分けて、基本的なグラフの描画方法について解説します。

  • 1次関数のグラフを表示する
  • 2次関数のグラフを表示する
  • 3次関数のグラフを表示する
  • 三角関数のグラフを表示する
  • 棒グラフを表示する
  • 円グラフを表示する
  • 折れ線グラフを表示する
  • 散布図を表示する
  • ヒートマップを表示する
  • ヒストグラムを表示する

1次関数のグラフを表示する

1次関数のグラフは、plot()とshow()の2つの関数・メソッドを、以下の構文で使用することで表示できます。

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

plot()はデータをグラフにプロットし、show()はそのグラフを画面に表示するためのものです。ただし、XとYそれぞれの値を格納したデータ配列を、あらかじめ個別に作成しておく必要があります。本記事のサンプルコードでは、「numpy.linspace()関数」でX軸方向のデータを自動生成しています。

データ配列 = numpy.linspace(開始値, 終了値, データ数)

以上のようにすると、「開始値」から「終了値」までの値を「データ数」で分割した配列を作成できます。詳細は以下のサンプルプログラムのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 0から100までの数値を1000分割したデータを生成する
x = numpy.linspace(0, 100, 1000)

# Y座標はX座標の半分とする
y = x * 0.5

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

numpy.linspace()関数の引数を変更すると、さまざまな1次関数のグラフが作れます。たとえば、数値が減っていくようにするとグラフの形状が変わります。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 0から10までの数値を100分割したデータを生成する
x = numpy.linspace(0, 10, 100)

# Y座標はX座標の4分の1で、符号をマイナスとする
y = x * -0.25

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

2次関数のグラフを表示する

2次関数のグラフも、基本的な部分は先ほどの1次関数と同じ手順で表示できるでしょう。ただし、2次関数になるようにするためには、Yの値は2乗値である必要があるので注意してください。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# -10から10までの数値を100分割したデータを生成する
x = numpy.linspace(-10, 10, 100)

# Y座標はX座標の2乗とする
y = x * x

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

Yの符号を反転させると、以下のように逆向きのグラフとなります。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# -10から10までの数値を100分割したデータを生成する
x = numpy.linspace(-10, 10, 100)

# Y座標はX座標の2乗として、符号を反転させる
y = x * x * -1

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

3次関数のグラフを表示する

3次関数のグラフの描画も、1次関数・2次関数とほとんど同じです。Yの値がXの3乗になるようなデータを作成し、グラフを描画すると以下のようになります。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# -10から10までの数値を100分割したデータを生成する
x = numpy.linspace(-10, 10, 100)

# Y座標はX座標の3乗とする
y = x * x * x

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

Yの符号を反転させると、以下のように逆向きのグラフになります。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# -10から10までの数値を100分割したデータを生成する
x = numpy.linspace(-10, 10, 100)

# Y座標はX座標の3乗として、符号を反転させる
y = x * x * x * -1

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

三角関数のグラフを表示する

三角関数のグラフも、Matplotlibなら簡単に描画できます。三角関数のデータをリストに格納し、plot()とshow()を呼び出せばOKです。三角関数には、主に「sin関数(正弦関数)」「cos関数(余弦関数)」「tan関数(正接関数)」の3種類があるため、それぞれの表示方法を解説します。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# -2πから2πまでの数値を100分割したデータを生成する
x = numpy.linspace(math.pi * -2, math.pi * 2, 100)

# 正弦関数とする
y = numpy.sin(x)

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

cos関数(余弦関数)を表示するサンプルコードは、以下のとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# -2πから2πまでの数値を100分割したデータを生成する
x = numpy.linspace(math.pi * -2, math.pi * 2, 100)

# 余弦関数とする
y = numpy.cos(x)

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

tan関数(正接関数)を表示するサンプルコードは、以下のとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# -2πから2πまでの数値を100分割したデータを生成する
x = numpy.linspace(math.pi * -2, math.pi * 2, 100)

# 正接関数とする
y = numpy.tan(x)

# ただし、そのままではおかしなグラフとなるため
# Yの値が10を超えた場合は「numpy.inf(無限大)」にするようにする
threshold = 10
y[y > threshold] = numpy.inf
y[y < -threshold] = numpy.inf

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

なお、tan関数を描画するときは「一定以上の値を無限大にする処理」を加えなければ、以下のようにおかしなグラフになってしまうので注意が必要です。

python-matplotlib

棒グラフを表示する

以下の構文で「pyplot.bar()関数」を使用すると、棒グラフを表示できます。

pyplot.bar(棒グラフの位置データ, height = 棒グラフの高さデータ, tick_label = 棒グラフの項目名データ)

棒グラフの位置データは、基本的にはrange()関数で0から順番に並べれば問題ありません。ただし、要素数がデータ数と一致しなければ、エラーになるので注意が必要です。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 棒グラフの生成に必要な3種類のデータを準備する
numbers = [i for i in range(0, 10)] # 棒グラフの位置
values = [random.randint(0, 100) for i in range(0, 10)] # 棒グラフの高さ
labels = [str(i + 1) for i in range(0, 10)] # 棒グラフの項目名

# 棒グラフをプロットする
pyplot.bar(numbers, height = values, tick_label = labels)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

円グラフを表示する

円グラフを表示する場合は、「pyplot.pie()関数」を以下の構文で使用しましょう。

pyplot.pie(数値データ, labels = グラフの文字列, colors = グラフの色情報, explode = グラフのオフセット, autopct = “値のフォーマット”, counterclock = 反時計回りか)

ただし、pie()関数に引き渡すためのデータ・ラベル名・色情報などのデータを、あらかじめ作成しておく必要があります。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 割合を示すデータを生成する
value = numpy.array([0.40, 0.30, 0.15, 0.10, 0.05])

# 各項目につけるラベルの文字列を設定する
# ASCII文字のみ対応しており、日本語や中国語などのマルチバイト文字は不可
label = ["A", "B", "C", "D", "E"]

# 各項目のグラフの色を指定する
color = ["tomato", "lightgreen", "gold", "skyblue", "lightgray"]

# 円グラフのオフセット値を設定する
# 最も大きな要素を少しズラすと、目立たせることができる
offset = [0.1, 0.0, 0.0, 0.0, 0.0]

# 円グラフをプロットする
# 第1引数は割合のデータ
# 「labels引数」は要素の文字列
# 「colors引数」は色情報
# 「explode引数」はオフセット
# 「autopct引数」は値の表示フォーマット
# 「counterclock引数」は反時計回りかどうか
pyplot.pie(value,
          labels = label,
          colors = color,
          explode = offset,
          autopct = "%1.1f%%",
          counterclock = False)

# 綺麗な円グラフを描画するために軸を等しく設定する
pyplot.axis("equal")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

pie()関数の「explode引数」と「counterclock引数」は省略できます。ただし、counterclock引数を省略すると、グラフが反時計回りになるので注意が必要です。「autopct引数」は、数値の表示桁数やパーセンテージ記号などの指定を行うためのものです。

なお、上記のサンプルプログラムではoffsetリストを設定し、1番大きな要素だけ少しズラすようにしています。このようにすると最大要素を目立たせることができるので、特定のデータをアピールしたいときにおすすめです。

なお、Matplotlibは基本的に「マルチバイト文字」に対応していないため、データなどに日本語を使うとエラーや文字化けが発生します。マルチバイト文字とは、日本語や中国語など複雑な文字を表示するためのコードです。Matplotlibはデフォルト設定の状態では、英数字のようなシングルバイト文字しか扱えないため、英数字を使うのが無難です。なお、Matplotlibで日本語を使う方法については後述します。

折れ線グラフを表示する

折れ線グラフを表示する場合も、グラフのプロットや表示などの部分はこれまでと同じです。今回は、range()関数で30個のX座標値を取得し、Y座標値をrandom.uniform()関数でランダムに設定しています。なお、XとYのデータ個数は、必ず同じでなければいけません。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 30個の数値データを生成する
x = [i for i in range(0, 30)]
y = [random.uniform(-100, 100) for i in range(0, 30)]

# XとYのグラフをプロットする
pyplot.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

散布図を表示する

散布図を表示する場合は、「pyplot.scatter()関数」を使用して、引数でxとyのデータを指定しましょう。詳細は以下のサンプルコードのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 0から10までの数値を100分割したデータを生成する
x = numpy.linspace(0, 10, 100)

# 100個の値をランダムに生成する
y = numpy.random.randn(100)

# 散布図を作成する
pyplot.scatter(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

ヒートマップを表示する

データの大きさを色で表すヒートマップは、「pyplot.pcolor()関数」で作成できます。ただし、ヒートマップのデータは縦横に並ぶ行列形式であるため、2次元リストを作成する必要があります。そのデータをpyplot.pcolor()関数に、以下の構文で引き渡せばヒートマップを作成可能です。その戻り値を、figure.colorbar()関数に渡すことで、ヒートマップの表示準備が整います。

ヒートマップデータ = pyplot.pcolor(2次元リストデータ, cmap = “カラーマップの種類”)

「cmap引数」には、多様な種類を指定できます。たとえば、「”Blues”」の場合は青系統、「”Greens”」だと緑系統になります。詳細は以下のサイトを参照してください。

https://matplotlib.org/stable/tutorials/colors/colormaps.html

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 縦と横のサイズを指定する
x = 15
y = 10

# ヒートマップデータの2次元リストを確保する
data = []

# forループを回して、2次元リストを作成する
for i in range(y):
  temp = []

  for j in range(x):
    # 100段階のランダムなデータを作成する
    temp.append(random.randint(0, 100))

  data.append(temp)

# figureオブジェクトを取得する
figure = pyplot.figure()

# ヒートマップを作成する
color = pyplot.pcolor(data, cmap = "Blues")

# データの色や大きさの凡例を示すカラーバーを表示する
figure.colorbar(color)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

なお、colorbar()関数を呼び出すためには、事前に「pyplot.figure()関数」を呼び出し、figureオブジェクトを取得しておく必要があります。詳細は後述しますが、pyplot.figure()はグラフやプロットのさまざまな設定に活用できるので、慣れておきましょう。

ヒストグラムを表示する

ヒストグラムは「hist()関数」で表示します。「bins引数」を指定することで、グラフの分解能を調整できます。なお、今回は「numpy.random.normal()関数」を使用して、正規分布に従ったデータを使用します。詳細は以下のサンプルコードのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 正規分布(ガウス分布)の乱数を生成する
# 第1引数は平均値
# 第2引数は標準偏差
# 第3引数は数値の数
x = numpy.random.normal(0, 10, 10000)

# 数値データからヒストグラムを生成する
# 「bins引数」はグラフの分割数を指定する
pyplot.hist(x, bins = 50)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

正規分布(ガウス分布)とは、平均値の付近にデータが集積しているようなものを指します。上記のように、平均値である「0」を中心として、ほぼ左右対称になるようにデータの数が分布していることが特徴です。

【基礎編2】特殊なグラフの作成方法

【基礎編2】特殊なグラフの作成方法

より高度なグラフを作成するには、事前にfigureオブジェクトを取得したうえで、以下の構文で「add_subplot()関数」を呼び出してサブプロットを作成する必要があります。

figure.add_subplot(111)

add_subplot()の引数については後述しますが、現時点では「111」でOKです。以上の点を踏まえて、特殊なグラフの描画方法を以下の3つの観点から解説します。

  • 左右に2つのY軸(縦軸)があるグラフを作成する
  • 3次元のグラフを表示する
  • 極座標グラフを表示する

左右に2つのY軸(縦軸)があるグラフを作成する

左右に2つのY軸(縦軸)があるグラフは、「サブプロット」を使うことで描画できます。もう1つの縦軸は、1つ目のサブプロットオブジェクトの「twinx()関数」を呼び出し、作ることがポイントになります。詳細は以下のサンプルコードのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# figureオブジェクトを取得する
# プロットの表示位置は自動調整する
figure = pyplot.figure(figsize = (8, 5), tight_layout = True)

# 2つのサブプロットを生成する
# 2つ目のサブプロットはもう1つのY軸用
sub1 = figure.add_subplot(111)
sub2 = sub1.twinx()

# グラフのデータを生成する
x = numpy.linspace(0, 10, 100)
y1 = x
y2 = x ** 2

# X軸とY軸それぞれの名称を設定する
sub1.set_xlabel("x_value")
sub1.set_ylabel("y = x")
sub2.set_ylabel("$y = x^2$")

# 2つのグラフをプロットする
p1 = sub1.plot(x, y1, label = "y = x", color = "red", linewidth = 2, linestyle = "solid")
p2 = sub2.plot(x, y2, label = "$y = x^2$", color = "blue", linewidth = 2, linestyle = "dashed")

# グラフの凡例を表示する
sub1.legend((p1[0], p2[0]), ("Data 1", "Data 2"), bbox_to_anchor = (1.1, 1.0), loc = "best")
sub2.legend((p1[0], p2[0]), ("Data 1", "Data 2"), bbox_to_anchor = (1.1, 1.0), loc = "best")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

まず、figure.add_subplot()関数を呼び出すことで、1つ目のサブプロットオブジェクトを作成します。そのうえで、1つ目のオブジェクトにあるtwinx()を呼び出すと、もう1つの縦軸を表示するためのサブプロットオブジェクトを生成できます。

3次元のグラフを表示する

3次元のグラフを描画する場合は、add_subplot()関数の「projection引数」に「”3d”」を指定し、戻り値のサブプロットオブジェクトのplot関数を呼び出します。3次元グラフの描画方法について、以下のサンプルコードで確認しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 3次元のデータを作成する
x = numpy.arange(-3.0, 3.0, 0.1) # 0.1間隔の等差数列を作成する
y = numpy.arange(-3.0, 3.0, 0.1) # 0.1間隔の等差数列を作成する
z = x ** 2 + y ** 2 # 両者の2乗値を足し合わせる

# figureオブジェクトを取得する
figure = pyplot.figure()

# 3次元グラフに対応したサブプロットを生成する
sub = figure.add_subplot(111, projection = "3d")

# 3次元グラフを作成する
sub.plot(x, y, z)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

極座標グラフを表示する

前述したように、極座標グラフは「原点からの距離と角度でデータを表現するグラフ」のことです。極座標の描画方法は、add_subplot()関数の「projection引数」に「”polar”」を指定するだけです。詳細を以下のサンプルコードで確認しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# データ数を指定する
num = 1000

# 極座標グラフのデータを生成する
x = numpy.linspace(0, numpy.pi * 2, num)
y = numpy.sin(x * 5) + numpy.random.normal(0, 0.1, num)

# figureオブジェクトを取得する
figure = pyplot.figure()

# 極座標グラフに対応したサブプロットを生成する
sub = figure.add_subplot(111, projection = "polar")

# 極座標グラフを作成する
sub.plot(x, y)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

極座標グラフは、データの中身や変化を工夫することで、上記のような幾何学模様を描画できることが魅力です。

【応用編1】Matplotlibの設定方法

【応用編1】Matplotlibの設定方法

Matplotlibでは、グラフの表示形式を細かく設定できます。本章では、Matplotlibの設定方法について、以下の12個のポイントから見ていきましょう。

  • グラフのサイズを指定する
  • グラフの色を指定する
  • グラフの太さを指定する
  • グラフの線の種類を指定する
  • グラフのマーカーの種類を指定する
  • グラフのタイトルやX軸・Y軸の名称をつける
  • グラフの値のフォーマットを設定する
  • グラフの各項目上部に値を表示する
  • グラフの背景色を設定する
  • グラフの目盛りを設定する
  • グラフにグリッドを表示する
  • 散布図の点の大きさと色をデータに応じて変更する

グラフのサイズを指定する

グラフのサイズは、「pyplot.figure()関数」を以下の構文で使用すると設定できます。

pyplot.figure(figsize = (Xサイズ, Yサイズ))

「figsize引数」に、X方向・Y方向のサイズを指定しましょう。ただし、この部分には「実際のグラフのピクセルサイズ÷100」とすることが重要です。たとえば、グラフのサイズを800×500にしたい場合は、引数は「(8, 5)」となります。詳細は以下のサンプルコードのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# -2πから2πまでの数値を100分割したデータを生成する
x = numpy.linspace(math.pi * -2, math.pi * 2, 100)

# 正接関数とする
y = numpy.tan(x)

# ただし、そのままではおかしなグラフとなるため
# Yの値が10を超えた場合は「numpy.inf(無限大)」にするようにする
threshold = 10
y[y > threshold] = numpy.inf
y[y < -threshold] = numpy.inf

# グラフエリアのサイズを設定する
pyplot.figure(figsize = (8, 5))

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
pyplot.plot(x, y, color = "blue")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

figsize引数の値を(5, 5)にすると、以下のような画面になります。グラフのサイズが小さすぎると、データが見づらくなってしまうので、適切なサイズに設定することが重要です。

python-matplotlib

グラフの色を指定する

グラフの色を変えたい場合は、pyplot.plot()関数の「color引数」を設定しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# -2πから2πまでの数値を100分割したデータを生成する
x = numpy.linspace(math.pi * -2, math.pi * 2, 100)

# 正接関数とする
y = numpy.tan(x)

# ただし、そのままではおかしなグラフとなるため
# Yの値が10を超えた場合は「numpy.inf(無限大)」にするようにする
threshold = 10
y[y > threshold] = numpy.inf
y[y < -threshold] = numpy.inf

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
pyplot.plot(x, y, color = "blue")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

pyplot.plot()のcolor引数を変更すれば、通常のグラフだけではなく散布図の色も変更できます。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 0から10までの数値を100分割したデータを生成する
x = numpy.linspace(0, 10, 100)

# 100個の値をランダムに生成する
y = numpy.random.randn(100)

# 散布図を作成する
# 「color引数」で点の色を設定
pyplot.scatter(x, y, color = "blue")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

グラフの太さを指定する

グラフの太さを変えたい場合は、pyplot.plot()関数の「linewidth引数」を設定しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# -2πから2πまでの数値を100分割したデータを生成する
x = numpy.linspace(math.pi * -2, math.pi * 2, 100)

# 正接関数とする
y = numpy.tan(x)

# ただし、そのままではおかしなグラフとなるため
# Yの値が10を超えた場合は「numpy.inf(無限大)」にするようにする
threshold = 10
y[y > threshold] = numpy.inf
y[y < -threshold] = numpy.inf

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
pyplot.plot(x, y, color = "green", linewidth = 10)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

pyplot.plot()関数のlinewidth引数を変更すれば、通常のグラフだけではなく、散布図の太さも変更できます。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 0から10までの数値を100分割したデータを生成する
x = numpy.linspace(0, 10, 100)

# 100個の値をランダムに生成する
y = numpy.random.randn(100)

# 散布図を作成する
# 「color引数」で点の色を設定
# 「linewidth引数」で点の太さを設定

pyplot.scatter(x, y, color = "blue", linewidth = 5)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

グラフの線の種類を指定する

Matplotlibでは、グラフの線の種類を変更することもできます。その場合は、「pyplot.plot()関数」の「linestyle引数」に、表示形式の名称を指定しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# -2πから2πまでの数値を100分割したデータを生成する
x = numpy.linspace(math.pi * -2, math.pi * 2, 100)

# -10から10までの数値を100分割したデータを生成する
x = numpy.linspace(-10, 10, 100)

# Y座標はX座標の3乗とする
y = x * x * x

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
# 「linestyle引数」で線の種類を設定
pyplot.plot(x, y, color = "blue", linewidth = 1, linestyle = "dashed")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

上記のサンプルプログラムでは、linestyle引数を「”dashed”」にしたため、グラフが破線形式で表示されています。linestyleを「”dotted”」にすると、以下のように点の集まりに変更できます。linestyleには、以下の4種類を指定することが可能です。

  • “solid”
  • “dashed”
  • “dashdot”
  • “dotted”

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# -2πから2πまでの数値を100分割したデータを生成する
x = numpy.linspace(math.pi * -2, math.pi * 2, 100)

# -10から10までの数値を100分割したデータを生成する
x = numpy.linspace(-10, 10, 100)

# Y座標はX座標の3乗とする
y = x * x * x

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
# 「linestyle引数」で線の種類を設定
pyplot.plot(x, y, color = "blue", linewidth = 1, linestyle = "dotted")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

グラフのマーカーの種類を指定する

グラフの各値をわかりやすく示すために、マーカーを表示することもできます。その場合は、pyplot.plot()関数で追加の引数を設定しましょう。「marker」でマーカーの形状、「markerfacecolor」でマーカーの色、「markersize」でマーカーのサイズを指定できます。詳細は以下のサンプルコードのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 30個の数値データを生成する
x = [i for i in range(0, 30)]
y = [random.uniform(-100, 100) for i in range(0, 30)]

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
# 「linestyle引数」で線の種類を設定
pyplot.plot(x, y, color = "blue", linewidth = 1, linestyle = "dashed",
           marker = "o", markerfacecolor = "green", markersize = 5)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

marker引数には、以下のような値を設定できます。設定内容によってマーカーの形状がまったく異なるため、さまざまなパターンを試してみましょう。

  • “o”
  • “v”
  • “^”
  • “<“
  • “>”
  • “*”
  • “x”

グラフのタイトルやX軸・Y軸の名称をつける

グラフのタイトルやX軸・Y軸の名称をつけたいときは、「title()」「xlabel()」「ylabel()」関数で簡単に設定できます。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 30個の数値データを生成する
x = [i for i in range(0, 30)]
y = [random.uniform(-100, 100) for i in range(0, 30)]

# グラフのタイトルを設定する
pyplot.title("Sample Graph")

# X軸とY軸それぞれの名称を設定する
pyplot.xlabel("Number")
pyplot.ylabel("Value")

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
# 「linestyle引数」で線の種類を設定
pyplot.plot(x, y, color = "blue", linewidth = 1, linestyle = "dashed",
           marker = "o", markerfacecolor = "green", markersize = 5)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

グラフの値のフォーマットを設定する

グラフのX軸やY軸の値が大きい場合は、値が省略されて表示されてしまうことがあります。そこで、以下の構文でフォーマットを指定することで、正確な値が表示されます。

pyplot.gca().xaxis.set_major_formatter(pyplot.FormatStrFormatter(“フォーマット”))

pyplot.gca().yaxis.set_major_formatter(pyplot.FormatStrFormatter(“フォーマット”))

フォーマットは整数値が「%d」・浮動小数点値が「%f」となります。小数点以下を表示したい場合は、たとえば小数点以下2桁まで表示するのであれば「%.2f」としましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 棒グラフの生成に必要な3種類のデータを準備する
numbers = [i for i in range(0, 10)] # 棒グラフの位置
values = [25346805, 19911593, 4912147, 4256540, 3534743, 3376003, 2936702, 2221218, 2058330, 1833274] # 棒グラフの高さ
labels = ["USA", "China", "Japan", "Germany", "India", "UK", "France", "Canada", "Italy", "Brazil"] # 棒グラフの項目名

# グラフエリアのサイズとレイアウトを設定する
pyplot.figure(figsize = (8, 5), tight_layout = True)

# 棒グラフをプロットする
pyplot.bar(numbers, height = values, tick_label = labels)

# Y軸の値のフォーマットを設定する
pyplot.gca().yaxis.set_major_formatter(pyplot.FormatStrFormatter("%d"))

# グラフのタイトルを設定する
pyplot.title("Top 10 GDP")

# X軸のラベルを設定する
pyplot.xlabel("Country")

# Y軸のラベルを設定する
pyplot.ylabel("GDP Million USD($)")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

フォーマットを指定しない場合は、以下のように省略されるため、データが見づらくなってしまいます。

python-matplotlib

グラフの各項目上部に値を表示する

グラフの各項目上部に値を表示したいときは、forループを回して、以下の構文で「pyplot.text()」関数を呼び出しましょう。

pyplot.text(ループカウンタ, データリスト[ループカウンタ], データリスト[ループカウンタ], ha = “center”)

ha引数を「”center”」とすることで、データの値が各項目の真上に表示されます。今回は一例として、世界のGDPトップ10をプロットするサンプルコードをご紹介しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 棒グラフの生成に必要な3種類のデータを準備する
numbers = [i for i in range(0, 10)] # 棒グラフの位置
values = [25346805, 19911593, 4912147, 4256540, 3534743, 3376003, 2936702, 2221218, 2058330, 1833274] # 棒グラフの高さ
labels = ["USA", "China", "Japan", "Germany", "India", "UK", "France", "Canada", "Italy", "Brazil"] # 棒グラフの項目名

# グラフエリアのサイズとレイアウトを設定する
pyplot.figure(figsize = (8, 5), tight_layout = True)

# 棒グラフをプロットする
pyplot.bar(numbers, height = values, tick_label = labels)

# 棒グラフ上部に値を表示する
for i in range(0, len(labels)):
  pyplot.text(i, values[i], values[i], ha = "center")

# Y軸の値のフォーマットを設定する
pyplot.gca().yaxis.set_major_formatter(pyplot.FormatStrFormatter("%d"))

# グラフのタイトルを設定する
pyplot.title("Top 10 GDP")

# X軸のラベルを設定する
pyplot.xlabel("Country")

# Y軸のラベルを設定する
pyplot.ylabel("GDP Million USD($)")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

上記のように、グラフの真上にGDP値が表示されるため、データを視覚的に表現できます。ただし、pyplot.text()の「ha引数」を指定しなければ、以下のように値の表示がズレてしまうため注意が必要です。

python-matplotlib

グラフの背景色を設定する

Matplotlibの背景色は、「グラフエリア」と「プロットエリア」双方のものを設定できます。グラフエリアはグラフの外側で、プロットエリアは実際にグラフを描画する部分を指します。

グラフエリアの背景色は、「pyplot.figure()」関数のfacecolor引数で設定可能です。プロットエリアの背景色は、まずpyplot.axes()で軸オブジェクトを生成し、そのset_facecolor()を呼び出せば設定できます。詳細は以下のサンプルコードのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 30個の数値データを生成する
x = [i for i in range(0, 30)]
y = [random.uniform(-100, 100) for i in range(0, 30)]

# グラフエリアの背景色を設定する
pyplot.figure(figsize = (8, 5), facecolor = "lightblue")

# プロットエリアの背景色を設定する
axes = pyplot.axes()
axes.set_facecolor("lightgray")

# グラフのタイトルを設定する
pyplot.title("Sample Graph")

# X軸とY軸それぞれの名称を設定する
pyplot.xlabel("Number")
pyplot.ylabel("Value")

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
# 「linestyle引数」で線の種類を設定
pyplot.plot(x, y, color = "blue", linewidth = 1, linestyle = "dashed",
           marker = "o", markerfacecolor = "green", markersize = 5)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

グラフの目盛りを設定する

「pyplot.xticks()」と「pyplot.yticks()」に、引数としてすべての目盛りを指定することで、グラフに目盛りを表示できるでしょう。ただし、手作業での作成は困難なので、以下のようにnumpy.linspace()関数を使用することをおすすめします。

pyplot.xticks(numpy.linspace(X目盛りの最小値, X目盛りの最大値, 目盛りの分割数))
pyplot.yticks(numpy.linspace(Y目盛りの最小値, Y目盛りの最大値, 目盛りの分割数))

グラフの目盛りを表示するサンプルコードを確認しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 30個の数値データを生成する
x = [i for i in range(-15, 15)]
y = [random.uniform(-100, 100) for i in range(0, 30)]

# グラフエリアの背景色を設定する
pyplot.figure(figsize = (8, 5), facecolor = "lightblue")

# プロットエリアの背景色を設定する
axes = pyplot.axes()
axes.set_facecolor("lightgray")

# グラフのタイトルを設定する
pyplot.title("Sample Graph")

# X軸とY軸それぞれの名称を設定する
pyplot.xlabel("Number")
pyplot.ylabel("Value")

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
# 「linestyle引数」で線の種類を設定
pyplot.plot(x, y, color = "blue", linewidth = 1, linestyle = "dashed",
           marker = "o", markerfacecolor = "green", markersize = 5)

# X軸とY軸の目盛りを設定する
pyplot.xticks(numpy.linspace(-30, 30, 13))
pyplot.yticks(numpy.linspace(-150, 150, 11))

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

グラフにグリッドを表示する

pyplot.grid()関数を呼び出すだけで、グラフに目盛りごとのグリッドを表示できます。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 30個の数値データを生成する
x = [i for i in range(0, 30)]
y = [random.uniform(-100, 100) for i in range(0, 30)]

# グラフエリアの背景色を設定する
pyplot.figure(figsize = (8, 5), facecolor = "lightblue")

# プロットエリアの背景色を設定する
axes = pyplot.axes()
axes.set_facecolor("lightgray")

# グラフのタイトルを設定する
pyplot.title("Sample Graph")

# X軸とY軸それぞれの名称を設定する
pyplot.xlabel("Number")
pyplot.ylabel("Value")

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
# 「linestyle引数」で線の種類を設定
pyplot.plot(x, y, color = "blue", linewidth = 1, linestyle = "dashed",
           marker = "o", markerfacecolor = "green", markersize = 5)

# グラフにグリッドを表示する
pyplot.grid()

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

散布図の点の大きさと色をデータに応じて変更する

散布図では、点の大きさや色でデータを表現することもできます。通常、散布図はX軸とY軸の2つで表現しますが、もうひとつのデータを用意することがポイントです。そのうえで、pyplot.scatter()関数を以下の構文で使用します。

scatter = pyplot.scatter(X軸データ, Y軸データ, s = 点のサイズリスト, c = 色情報, cmap = “カラーマップ”, alpha = アルファ値)

通常の散布図とは異なり、さまざまな引数を追加します。こうすることで、通常の散布図よりも多くの情報を表現できるようになります。詳細は以下のサンプルコードのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 0から10までの数値を100分割したデータを生成する
x = numpy.linspace(0, 10, 100)

# 100個の値をランダムに生成する
y = numpy.random.randn(100)

# 100段階でデータのサイズをランダムに設定する
# いわば3つ目のデータとなる
z = numpy.random.randint(1, 100, 100)

# figureオブジェクトを取得する
figure = pyplot.figure()

# 散布図を作成する
scatter = pyplot.scatter(x, y, s = z * 10, c = z, cmap = "viridis", alpha = 0.5)

# データの色や大きさの凡例を示すカラーバーを表示する
figure.colorbar(scatter)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

【応用編2】Matplotlibの応用テクニック

【応用編2】Matplotlibの応用テクニック

Matplotlibには、複数のグラフや凡例を表示するための機能も備わっています。ここでは、わかりやすいグラフを作成するために重要な、以下の6つの応用テクニックをご紹介します。

  • 複数のグラフを表示する
  • 凡例を表示する
  • 複数のグラフを凡例つきで表示する
  • 凡例の設定を行う
  • 凡例をプロットの外側に表示する
  • プロットのレイアウトを自動調整する

複数のグラフを表示する

複数のグラフを表示したいときは、plot()関数を2回呼び出すだけでOKです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 1つ目のデータを生成する
x1 = [i for i in range(0, 10)]
y1 = [random.uniform(-100, 100) for i in range(0, 10)]

# 2つ目のデータを生成する
x2 = [i for i in range(0, 10)]
y2 = [random.uniform(-100, 100) for i in range(0, 10)]

# 2つのグラフをプロットする
pyplot.plot(x1, y1, color = "red", linewidth = 1, linestyle = "solid")
pyplot.plot(x2, y2, color = "blue", linewidth = 1, linestyle = "dashed")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

凡例を表示する

グラフを表示するときは、「凡例」をつけるようにするとわかりやすくなります。凡例とは、各グラフがどのデータを示すものか示すためのものです。Matplotlibでは、plot()関数の「label引数」で名称を指定したあとで、pyplot.legend()関数を呼び出すことで凡例を表示できます。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# データを生成する
x = [i for i in range(0, 10)]
y = [random.uniform(-100, 100) for i in range(0, 10)]

# グラフをプロットする
# 凡例の名称は「Sample Data」とする
pyplot.plot(x, y, label = "Sample Data", color = "red", linewidth = 1, linestyle = "solid")

# グラフの凡例を表示する
pyplot.legend()

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

複数のグラフを凡例つきで表示する

凡例の表示は、複数のグラフを表示するときにより効果的です。複数のグラフを凡例つきで描画するためには、pyplot.legend()関数を以下の構文で使用する必要があります。

pyplot.legend((1つ目のプロット[0], 2つ目のプロット[0]), (“1つ目のグラフ名”, “2つ目のグラフ名”), loc = “凡例の表示位置”)

上記のように、プロットデータとグラフ名をタプル形式で並べ、「loc引数」で凡例の表示位置を指定すればOKです。たとえば、5つのグラフを描画する場合は、5つのデータとグラフ名を指定します。ただし、plot()関数を呼び出したときに、その戻り値を受け取っておく必要があるので注意してください。「loc引数」は、以下の11種類から選びます。

  • “best”
  • “right”
  • “center”
  • “upper left”
  • “upper right”
  • “upper center”
  • “lower left”
  • “lower right”
  • “lower center”
  • “center left”
  • “center right”

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 1つ目のデータを生成する
x1 = [i for i in range(0, 10)]
y1 = [random.uniform(-100, 100) for i in range(0, 10)]

# 2つ目のデータを生成する
x2 = [i for i in range(0, 10)]
y2 = [random.uniform(-100, 100) for i in range(0, 10)]

# 2つのグラフをプロットする
# この時点では凡例を指定しない
p1 = pyplot.plot(x1, y1, color = "red", linewidth = 1, linestyle = "solid")
p2 = pyplot.plot(x2, y2, color = "blue", linewidth = 1, linestyle = "dashed")

# グラフの凡例を表示する
pyplot.legend((p1[0], p2[0]), ("Data 1", "Data 2"), loc = "lower right")

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

凡例の設定を行う

凡例の表示方式は細かく設定できるのが魅力です。「pyplot.legend引数」に以下の引数を指定することで、表示形式や背景色などさまざまな要素を指定できます。

項目 概要 備考
frameon 凡例の枠をつけるか Trueで枠をつける
Falseで枠をつけない
fancybox 凡例の枠の角を丸めるか Trueで角を丸める
Falseで角を丸めない
shadow 凡例の枠に影をつけるか Trueで影をつける
Falseで影をつけない
framealpha 凡例のアルファチャンネル 0.0~1.0の範囲で指定する
数値が大きいと不透明
小さいと半透明に近づく
facecolor 凡例の色を指定する 文字列で色を指定する
edgecolor 凡例の枠の色を指定する 色を文字列で指定する
title 凡例のタイトルを設定する 任意の文字列を指定する
title_fontsize 凡例のフォントサイズを指定する 数値でサイズを指定する

凡例の設定方法について、以下のサンプルコードで確認しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 1つ目のデータを生成する
x1 = [i for i in range(0, 10)]
y1 = [random.uniform(-100, 100) for i in range(0, 10)]

# 2つ目のデータを生成する
x2 = [i for i in range(0, 10)]
y2 = [random.uniform(-100, 100) for i in range(0, 10)]

# グラフエリアの背景色を設定する
pyplot.figure(figsize = (8, 5), facecolor = "lightblue")

# プロットエリアの背景色を設定する
axes = pyplot.axes()
axes.set_facecolor("white")

# グラフのタイトルを設定する
pyplot.title("Sample Graph")

# X軸とY軸それぞれの名称を設定する
pyplot.xlabel("Number")
pyplot.ylabel("Value")

# 2つのグラフをプロットする
# この時点では凡例を指定しない
p1 = pyplot.plot(x1, y1, color = "red", linewidth = 1, linestyle = "solid")
p2 = pyplot.plot(x2, y2, color = "blue", linewidth = 1, linestyle = "dashed")

# グラフの凡例を表示する
pyplot.legend((p1[0], p2[0]), ("Data 1", "Data 2"), loc = "lower right",
             frameon = True, fancybox = True, shadow = True, framealpha = 0.1,
             facecolor = "lightgray", edgecolor = "green", title = "Sample Legend", title_fontsize = 10)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

凡例をプロットの外側に表示する

凡例がグラフ内部にあると、前述した方法でアルファ値を下げたとしても、データが見づらくなることがあります。そこで、凡例をグラフ外部に表示すると、データが見やすくなります。legend()関数の「bbox_to_anchor引数」に、オフセット値をタプル形式で指定することで、プロットの外側に凡例を表示可能です。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 1つ目のデータを生成する
x1 = [i for i in range(0, 10)]
y1 = [random.uniform(-100, 100) for i in range(0, 10)]

# 2つ目のデータを生成する
x2 = [i for i in range(0, 10)]
y2 = [random.uniform(-100, 100) for i in range(0, 10)]

# グラフエリアの背景色を設定する
pyplot.figure(figsize = (8, 5), facecolor = "lightblue")

# プロットエリアの背景色を設定する
axes = pyplot.axes()
axes.set_facecolor("white")

# グラフのタイトルを設定する
pyplot.title("Sample Graph")

# X軸とY軸それぞれの名称を設定する
pyplot.xlabel("Number")
pyplot.ylabel("Value")

# 2つのグラフをプロットする
# この時点では凡例を指定しない
p1 = pyplot.plot(x1, y1, color = "red", linewidth = 1, linestyle = "solid")
p2 = pyplot.plot(x2, y2, color = "blue", linewidth = 1, linestyle = "dashed")

# グラフの凡例を表示する
# 「bbox_to_anchor引数」の値を調整することで、プロットの外側に凡例を表示できる
pyplot.legend((p1[0], p2[0]), ("Data 1", "Data 2"), bbox_to_anchor = (1.0, 1.0), loc = "upper left",
             frameon = True, fancybox = True, shadow = True, framealpha = 0.1,
             facecolor = "lightgray", edgecolor = "green", title = "Sample Legend", title_fontsize = 10)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

上記のように外側に凡例を表示できますが、そのままではウィンドウからはみ出してしまっていることが問題です。そのため、次の項目で解説する手順を実行し、プロットのレイアウトを自動調整する必要があります。

プロットのレイアウトを自動調整する

figure()関数の「tight_layout引数」をTrueにすると、サブプロットの表示位置が自動調整されます。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 1つ目のデータを生成する
x1 = [i for i in range(0, 10)]
y1 = [random.uniform(-100, 100) for i in range(0, 10)]

# 2つ目のデータを生成する
x2 = [i for i in range(0, 10)]
y2 = [random.uniform(-100, 100) for i in range(0, 10)]

# グラフエリアの背景色を設定する
pyplot.figure(figsize = (8, 5), facecolor = "lightblue", tight_layout = True)

# プロットエリアの背景色を設定する
axes = pyplot.axes()
axes.set_facecolor("white")

# グラフのタイトルを設定する
pyplot.title("Sample Graph")

# X軸とY軸それぞれの名称を設定する
pyplot.xlabel("Number")
pyplot.ylabel("Value")

# 2つのグラフをプロットする
# この時点では凡例を指定しない
p1 = pyplot.plot(x1, y1, color = "red", linewidth = 1, linestyle = "solid")
p2 = pyplot.plot(x2, y2, color = "blue", linewidth = 1, linestyle = "dashed")

# グラフの凡例を表示する
pyplot.legend((p1[0], p2[0]), ("Data 1", "Data 2"), bbox_to_anchor = (1.0, 1.0), loc = "upper left",
             frameon = True, fancybox = True, shadow = True, framealpha = 0.1,
             facecolor = "lightgray", edgecolor = "green", title = "Sample Legend", title_fontsize = 10)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

このように、プロットや凡例の位置が自動的に調整されて、ダブりのない見やすい画面となります。そのため、figure()関数のtight_layout引数は、基本的にTrueにしておくことをおすすめです。

【発展編1】複数のプロットを作成する方法

【発展編1】複数のプロットを作成する方法

Matplotlibでは、グラフだけではなくプロット自体を複数表示することもできます。複数のプロットを作成する方法について、以下の3つのポイントから解説しましょう。

  • 複数のプロットを表示する
  • 各サブプロットに複数のグラフを表示する
  • サブプロットにタイトル・ラベル・凡例をつける

複数のプロットを表示する

複数のプロットを表示するためには、figureオブジェクトのadd_subplot()関数を呼び出し、各サブプロットのplot()関数でデータを設定する必要があります。figureオブジェクトは、先ほど紹介したpyplot.figure()関数の戻り値で取得できます。ただし、add_subplot()関数の引数が以下のように独特なので、利用時は注意が必要です。

figure.add_subplot(「Y軸方向のプロット数」「X軸方向のプロット数」「当該プロットの番号」)

たとえば、横方向に2つ・縦方向に1つのプロットを並べる場合は、figure.add_subplot()の引数は1つ目のプロットが「121」・2つ目のプロットが「122」となります。詳細は以下のサンプルコードのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 複数のプロットデータを準備する
x1 = [i for i in range(0, 10)]
y1 = [random.uniform(-100, 100) for i in range(0, 10)]

x2 = [i for i in range(0, 10)]
y2 = [random.uniform(-100, 100) for i in range(0, 10)]

# figureオブジェクトを生成する
# サブプロットを作成するために、figure()関数の呼び出しが必須
figure = pyplot.figure(figsize = (8, 5))

# 2つのサブプロットを作成する
# 引数の並びは「Y軸方向のプロット数」「X軸方向のプロット数」「当該プロットの番号」
# 今回は横2個・縦1個の並びなので、上2桁は「12」となる
sub1 = figure.add_subplot(121) # 1番目のプロットなので3桁目は「1」
sub2 = figure.add_subplot(122) # 2番目のプロットなので3桁目は「2」

# 各サブプロットにデータをセットする
sub1.plot(x1, y1)
sub2.plot(x2, y2)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

横に3つ・縦に2つ並べるなど、より多くのサブプロットを並べる場合は、以下のようにリストを活用するのが効率的です。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 複数のプロットデータを格納するためのリストを確保する
x = []
y = []
sub = []

# figureオブジェクトを生成する
# サブプロットを作成するために、figure()関数の呼び出しが必須
figure = pyplot.figure(figsize = (8, 5))

# forループを回してプロットデータとサブプロットを作成する
for i in range(6):
  x.append([i for i in range(0, 10)])
  y.append([random.uniform(-100, 100) for i in range(0, 10)])
  sub.append(figure.add_subplot(230 + (i + 1)))
  
# 各サブプロットにデータをセットする
for i in range(6):
  sub[i].plot(x[i], y[i])

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

横に3つ・縦に2つ並べるので、add_subplotの引数の上2桁は「23」となります。3桁目に関しては、forループのカウンタを使用して自動的に設定しています。プロット数が大きくなるほど管理が難しくなるので、ぜひ参考にしてみてください。

各サブプロットに複数のグラフを表示する

それぞれのサブプロットに複数のグラフを表示したい場合は、各サブプロットのplot()関数を複数回呼び出しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 複数のプロットデータを格納するためのリストを確保する
x1 = [] # 1つ目のデータのX座標
y1 = [] # 1つ目のデータのY座標

x2 = [] # 2つ目のデータのX座標
y2 = [] # 2つ目のデータのY座標

sub = [] # サブプロットのオブジェクト

# figureオブジェクトを生成する
# サブプロットを作成するために、figure()関数の呼び出しが必須
figure = pyplot.figure(figsize = (8, 5))

# forループを回してプロットデータとサブプロットを作成する
for i in range(6):

  # 1つ目のデータを作成する
  x1.append([i for i in range(0, 10)])
  y1.append([random.uniform(-100, 100) for i in range(0, 10)])
  
  # 2つ目のデータを作成する
  x2.append([i for i in range(0, 10)])
  y2.append([random.uniform(-100, 100) for i in range(0, 10)])

  # サブプロットのオブジェクトを作成する
  sub.append(figure.add_subplot(230 + (i + 1)))
  
# 各サブプロットにデータをセットする
for i in range(6):

  # 1つ目のデータをプロットする
  sub[i].plot(x1[i], y1[i])
  
  # 2つ目のデータをプロットする
  sub[i].plot(x2[i], y2[i])

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

サブプロットにタイトル・ラベル・凡例をつける

サブプロットにタイトル・ラベル・凡例をつけるときは、各サブプロットオブジェクトの「set_title()」「set_xlabel()」「set_ylabel()」「legend()」を呼び出せばOKです。ただし、ダブりやはみ出しが多くなるので、前述した方法で調整する必要があります。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 複数のプロットデータを格納するためのリストを確保する
x1 = [] # 1つ目のデータのX座標
y1 = [] # 1つ目のデータのY座標

x2 = [] # 2つ目のデータのX座標
y2 = [] # 2つ目のデータのY座標

sub = [] # サブプロットのオブジェクト

# figureオブジェクトを生成する
# サブプロットを作成するために、figure()関数の呼び出しが必須
figure = pyplot.figure(figsize = (12, 5), tight_layout = True)

# forループを回してプロットデータとサブプロットを作成する
for i in range(6):

  # 1つ目のデータを作成する
  x1.append([i for i in range(0, 10)])
  y1.append([random.uniform(-100, 100) for i in range(0, 10)])
  
  # 2つ目のデータを作成する
  x2.append([i for i in range(0, 10)])
  y2.append([random.uniform(-100, 100) for i in range(0, 10)])

  # サブプロットのオブジェクトを作成する
  sub.append(figure.add_subplot(230 + (i + 1)))
  
# 各サブプロットにデータをセットする
for i in range(6):

  # プロットにタイトルを設定する
  sub[i].set_title(f"Data{i + 1}")
  
  # X軸とY軸それぞれの名称を設定する
  sub[i].set_xlabel("Number")
  sub[i].set_ylabel("Value")

  # 1つ目のデータをプロットする
  p1 = sub[i].plot(x1[i], y1[i], color = "red", linewidth = 1, linestyle = "solid")
  
  # 2つ目のデータをプロットする
  p2 = sub[i].plot(x2[i], y2[i], color = "blue", linewidth = 1, linestyle = "dashed")

  # グラフの凡例を表示する
  sub[i].legend((p1[0], p2[0]), ("Data 1", "Data 2"), bbox_to_anchor = (1.0, 1.0), loc = "upper left",
                frameon = True, fancybox = True, shadow = True, framealpha = 1.0,
                facecolor = "skyblue", edgecolor = "blue", title = "Sample Legend", title_fontsize = 10)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

【発展編2】Matplotlibを便利に使うためのテクニック

【発展編2】Matplotlibを便利に使うためのテクニック

Matplotlibをより便利に使うために必要な、以下の2つのテクニックをご紹介します。

  • 作成したグラフを出力する
  • 日本語を表示できるようにする

作成したグラフを出力する

これまでに解説した方法で作成したグラフを、ファイル形式で出力したい場合は、以下の構文で「pyplot.savefig()関数」を使用します。

pyplot.savefig(“ファイル名”, format = “ファイル形式”, dpi = 解像度)

「format引数」には、以下の13種類のものを選べます。出力する目的や活用法に応じて、適切なものを選びましょう。

  • emf
  • eps
  • jpeg
  • jpg
  • pdf
  • png
  • ps
  • raw
  • rgba
  • svg
  • svgz
  • tif
  • tiff

以下のサンプルコードは、複数のデータをプロットし、その結果をPNG形式で出力するためのものです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 複数のプロットデータを格納するためのリストを確保する
x1 = [] # 1つ目のデータのX座標
y1 = [] # 1つ目のデータのY座標

x2 = [] # 2つ目のデータのX座標
y2 = [] # 2つ目のデータのY座標

sub = [] # サブプロットのオブジェクト

# figureオブジェクトを生成する
# サブプロットを作成するために、figure()関数の呼び出しが必須
figure = pyplot.figure(figsize = (12, 5), tight_layout = True)

# forループを回してプロットデータとサブプロットを作成する
for i in range(6):

  # 1つ目のデータを作成する
  x1.append([i for i in range(0, 10)])
  y1.append([random.uniform(-100, 100) for i in range(0, 10)])
  
  # 2つ目のデータを作成する
  x2.append([i for i in range(0, 10)])
  y2.append([random.uniform(-100, 100) for i in range(0, 10)])

  # サブプロットのオブジェクトを作成する
  sub.append(figure.add_subplot(230 + (i + 1)))
  
# 各サブプロットにデータをセットする
for i in range(6):

  # プロットにタイトルを設定する
  sub[i].set_title(f"Data{i + 1}")
  
  # X軸とY軸それぞれの名称を設定する
  sub[i].set_xlabel("Number")
  sub[i].set_ylabel("Value")

  # 1つ目のデータをプロットする
  p1 = sub[i].plot(x1[i], y1[i], color = "red", linewidth = 1, linestyle = "solid")
  
  # 2つ目のデータをプロットする
  p2 = sub[i].plot(x2[i], y2[i], color = "blue", linewidth = 1, linestyle = "dashed")

  # グラフの凡例を表示する
  sub[i].legend((p1[0], p2[0]), ("Data 1", "Data 2"), bbox_to_anchor = (1.0, 1.0), loc = "upper left",
                frameon = True, fancybox = True, shadow = True, framealpha = 1.0,
                facecolor = "skyblue", edgecolor = "blue", title = "Sample Legend", title_fontsize = 10)

# 作成したグラフをPNGファイルで出力する
pyplot.savefig("Graph.png", format = "png", dpi = 300)

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

pyplot.savefig()関数を使えば、データの作成・プロットからデータの出力まで、複雑な工程をプログラムで一元化できます。データの利活用に極めて便利なので、ぜひご活用ください。

日本語を表示できるようにする

前述したように、Matplotlibで日本語を使うと文字化けするうえに、コンソール画面には大量のエラーが表示されてしまいます。その状況を以下のサンプルコードで確認しましょう。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 30個の数値データを生成する
x = [i for i in range(0, 30)]
y = [random.uniform(-100, 100) for i in range(0, 30)]

# グラフエリアの背景色を設定する
pyplot.figure(figsize = (8, 5), facecolor = "lightblue")

# プロットエリアの背景色を設定する
axes = pyplot.axes()
axes.set_facecolor("lightgray")

# グラフのタイトルを設定する
pyplot.title("サンプルグラフ")

# X軸とY軸それぞれの名称を設定する
pyplot.xlabel("番号")
pyplot.ylabel("数値")

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
# 「linestyle引数」で線の種類を設定
pyplot.plot(x, y, label = "サンプルデータ", color = "blue", linewidth = 1, linestyle = "dashed",
           marker = "o", markerfacecolor = "green", markersize = 5)

# グラフにグリッドを表示する
pyplot.grid()

# グラフの凡例を表示する
pyplot.legend()

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果
メインウィンドウ

python-matplotlib

コンソール画面

python-matplotlib

Matplotlibで日本語を表示するためには、pyplot.rcParamsプロパティの「”font.family”」に、以下の構文でフォント名を指定する必要があります。

pyplot.rcParams[“font.family”] = “フォント名”

詳細は以下のサンプルコードのとおりです。

//サンプルプログラム

# coding: UTF-8

# matplotlibライブラリ「pyplotモジュール」を「pyplot」という名称でimportする
import matplotlib.pyplot as pyplot

# 「numpy」ライブラリをimportする
import numpy

# 「math」ライブラリをimportする
import math

# 「random」ライブラリをimportする
import random

# 「MS Gothic」フォントを使用する
pyplot.rcParams["font.family"] = "MS Gothic"

# 30個の数値データを生成する
x = [i for i in range(0, 30)]
y = [random.uniform(-100, 100) for i in range(0, 30)]

# グラフエリアの背景色を設定する
pyplot.figure(figsize = (8, 5), facecolor = "lightblue")

# プロットエリアの背景色を設定する
axes = pyplot.axes()
axes.set_facecolor("lightgray")

# グラフのタイトルを設定する
pyplot.title("サンプルグラフ")

# X軸とY軸それぞれの名称を設定する
pyplot.xlabel("番号")
pyplot.ylabel("数値")

# XとYのグラフをプロットする
# 「color引数」で線の色を設定
# 「linewidth引数」で線の太さを設定
# 「linestyle引数」で線の種類を設定
pyplot.plot(x, y, label = "サンプルデータ", color = "blue", linewidth = 1, linestyle = "dashed",
           marker = "o", markerfacecolor = "green", markersize = 5)

# グラフにグリッドを表示する
pyplot.grid()

# グラフの凡例を表示する
pyplot.legend()

# 作成したグラフをウィンドウに表示する
pyplot.show()

//実行結果

python-matplotlib

Matplotlibでデータを可視化する際は、「目で見てすぐ理解できる」ことも重要です。そのため、上記の方法で日本語表示を可能にしておくと、よりわかりやすいグラフが作成できるようになります。

PythonのMatplotlibで高度なグラフを作成しよう

PythonのMatplotlibで高度なグラフを作成しよう

PythonのMatplotlibを活用すると、大量のデータや複雑なデータを、わかりやすい形で視覚化できます。あらゆる種類・形式のグラフを描画できるため、データ利活用において大きなメリットが得られるでしょう。Matplotlibには膨大な機能があるので、どの機能を使うべきかわかりにくいかもしれません。しかし、今回ご紹介したサンプルコードを参考にすることで、基本的なグラフの描画手順が身につくでしょう。

アクセスランキング 人気のある記事をピックアップ!

    コードカキタイがオススメする記事!

    1. 子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      2024.01.26

      子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      #プログラミングスクール

    2. 【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      2022.01.06

      【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      #プログラミングスクール

    3. 【未経験でも転職可】30代におすすめプログラミングスクール8選!

      2024.01.26

      【未経験でも転職可】30代におすすめプログラミングスクール8選!

      #プログラミングスクール

    4. 初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      2024.01.26

      初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      #JAVA

    5. 忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      2024.01.26

      忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      #プログラミングスクール

    1. 【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      2022.01.06

      【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      #プログラミングスクール

    2. 【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      2024.01.26

      【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      #プログラミングスクール

    3. 【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    4. 【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    5. 【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      2024.01.26

      【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      #プログラミングスクール