Python

【Python】外部パッケージの利用(グラフ作成:matplotlib)

外部パッケージの利用(グラフ作成:matplotlib)Python

前回の記事でPythonの外部パッケージとして、Web情報取得のための外部モジュール「requests」について使い方などを説明しました。

今回はデータを視覚的に表現する方法としてグラフ作成のための「matplotlib」という外部パッケージについて、その内容と使い方などを説明していきたいと思います。

この記事を読んで分かること
  • 外部パッケージについての内容がわかる
  • matplotlibパッケージについて、その内容と具体的な使い方が分かる
スポンサーリンク

matplotlibのインストール

データ処理を行う場合、ただ数値を計算するだけでなく、グラフなどを使って視覚的に表現したい場合もあります。

ここまで実行結果はターミナルで出力してたから、視覚的な表現はいまいちピンとこないかもしれないですね

そうしたデータをグラフ表示してくれる外部パッケージも存在します。

matplotlib」はグラフ作成のパッケージとして広く使われているモジュールで、以下のサイトで公開、紹介されています。

Matplotlib — Visualization with Python

ですので、matplotlibのドキュメントやサンプルなどの情報を得るのに利用すると良いかと思います。

ちなみにプログラム本体はpipでインストール出来ます。
この外部モジュールを利用することで非常に簡単にグラフを作成することが出来ます。

matplotlibパッケージのインストール

では、「matplotlib」パッケージをインストールしてみましょう。

インストールは前回説明した「pip」コマンドを使ってインストールします。

ターミナルを起動して、以下のコマンドを実行すると「matplotlib」モジュールの最新バージョンがインストールされます。

pip install matplotlib

メモ

お使いのPython実行環境によっては、上記pipコマンドでエラーがでる場合がありますので、その場合はpipコマンド前に上記「python -m」または「python3 -m」をつけるように読み替えて下さい。

ちなみに、筆者の環境でインストールを実行すると以下の表示がされました。

$ pip install matplotlib
Collecting matplotlib
  Downloading matplotlib-3.5.1-cp310-cp310-macosx_10_9_x86_64.whl (7.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.3/7.3 MB 9.2 MB/s eta 0:00:00
Collecting pyparsing>=2.2.1
  Downloading pyparsing-3.0.8-py3-none-any.whl (98 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.5/98.5 KB 5.9 MB/s eta 0:00:00
Collecting fonttools>=4.22.0
  Downloading fonttools-4.32.0-py3-none-any.whl (900 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 900.8/900.8 KB 9.0 MB/s eta 0:00:00
Collecting kiwisolver>=1.0.1
  Downloading kiwisolver-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl (65 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65.3/65.3 KB 6.2 MB/s eta 0:00:00
Collecting pillow>=6.2.0
  Downloading Pillow-9.1.0-cp310-cp310-macosx_10_9_x86_64.whl (3.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 9.0 MB/s eta 0:00:00
Collecting packaging>=20.0
  Downloading packaging-21.3-py3-none-any.whl (40 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 KB 3.7 MB/s eta 0:00:00
Collecting python-dateutil>=2.7
  Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 KB 8.2 MB/s eta 0:00:00
Collecting numpy>=1.17
  Downloading numpy-1.22.3-cp310-cp310-macosx_10_14_x86_64.whl (17.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.6/17.6 MB 9.0 MB/s eta 0:00:00
Collecting cycler>=0.10
  Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)
Collecting six>=1.5
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, pyparsing, pillow, numpy, kiwisolver, fonttools, cycler, python-dateutil, packaging, matplotlib
Successfully installed cycler-0.11.0 fonttools-4.32.0 kiwisolver-1.4.2 matplotlib-3.5.1 numpy-1.22.3 packaging-21.3 pillow-9.1.0 pyparsing-3.0.8 python-dateutil-2.8.2 six-1.16.0

最終行に「Successfully installed」もしくは「Requirement already satisfied」と表示されていれば、matplotlibのインストールが正しく行われています

スポンサーリンク

折れ線グラフの作成

matplotlibには、さまざまなグラフ作成を行う機能が用意されています。

グラフの描写(プロット)には、matplotlibにあるpyplotモジュールを使います。

この中には様々なグラフ描写のための関数がありますが、まずは一番シンプルな折れ線グラフの描写関数から使ってみましょう。

折れ線グラフは「plot」という関数を使います。

pyplot.plot(x軸のデータ, y軸のデータ)

plot関数には2つの引数があり、x軸のデータとy軸のデータをそれぞれ用意します。

データはシーケンスのオブジェクト(リスト、タプル、レンジなど)で設定します。

グラフはplot関数を利用するだけでは表示されません
作成後に「show」関数で表示させる必要があります。

では実際にplot関数を使って折れ線グラフを描写してみましょう。

以下、簡単な折れ線グラフのプログラムです。

from matplotlib import pyplot

x = range(10)
y = [0,1,2,3,5,8,13,21,34,55]

pyplot.plot(x,y)
pyplot.show()

3行目でx軸に0から10までの数字を格納し、4行目でy軸にフィボナッチ数列を入れています。

6行目で変数x,yにデータをまとめて、それを使ってグラフをプロットしています。

そして7行目でshow関数でプロットしたグラフをウィンドウ表示します。

ではこのプログラムを実行してみるとどうなるでしょうか。

プログラムを実行してみると、下記のような新たなウィンドウが現れて、そこに折れ線グラフが表示されます。

matplotlibを使った折れ線グラフ

ウィンドウは、マウスでリサイズすると自動的にグラフもウィンドウサイズに合うようにリサイズされます。

また、左下に表示の操作をするアイコンが並んでおり、ズームやパンといったグラフ表示の操作やファイル保存といったことも出来ます。

ポイント

折れ線グラフは、pyplotモジュールの「plot」関数で作成する
plot関数でグラフを作成したら「show」関数を実行してウィンドウに表示させる

スポンサーリンク

グラフ表示を整える

グラフが表示されましたが、正直これだと何のグラフか分かりません。

ですので、グラフにタイトルや凡例などを表示してみましょう。

グラフの表示に関する関数

グラフのタイトルを設定するのが「title」関数です。

引数に指定した文字列をタイトルとして表示します。

pyplot.title(タイトルの文字列)

x軸とy軸のラベル(軸の役割を示したテキスト表示)を設定する関数には「xlabel」「ylabel」関数を使います。

これも引数に指定した文字列をx軸、y軸のラベルとして表示します。

pyplot.xlabel(x軸のラベルの文字列)
pyplot.ylabel(y軸のラベルの文字列)

凡例は「legend」関数を使います。

pyplot.legend()

これは、plot関数でグラフをプロットするときにキーワード引数「label=」を指定することで、そのラベルを使って凡例が作成されます。

pyplot.plot(x軸のデータ, y軸のデータ, label =”グラフのラベル”)

では、上記の関数を使ってグラフの表示を整えてみましょう。

先ほど作成したグラフに直線のグラフを追加して、表示に「タイトル」「xy軸のラベル」「凡例」を追加して表示します。

from matplotlib import pyplot

x = range(10)
y1 = [0,1,2,3,5,8,13,21,34,55]
y2 = [0,5,10,15,20,25,30,35,40,45]

pyplot.plot(x,y1,label="fibonacci sequence")
pyplot.plot(x,y2,label="equivalent sequence")

pyplot.title("Graph of fibonacci and equivalent")
pyplot.xlabel("inclease in x")
pyplot.ylabel("inclease in y")
pyplot.legend()
pyplot.show()

日本語は入らないみたいなので、英語でラベルを入れてみました

7,8行目で、グラフをプロットする際に、キーワード引数「label=」に凡例用の文字列を追加しています。

また10行目から、グラフのタイトル、xy軸のラベル、凡例を作って表示しています。

プログラムを実行してみると、下記のような新たなウィンドウが現れて、そこにラベル付きの折れ線グラフが表示されます。

matplotlibを使ったラベル付き折れ線グラフ
スポンサーリンク

散布図の作成

グラフのplot関数は、デフォルトで折れ線グラフになります。

これはデフォルトで各要素間を線で結ぶように設定されているからなのですが、これを線で結ばずにドットなどで表すようにすれば散布図が作成できます。

では、簡単な散布図を作ってみましょう。

from random import randrange
from matplotlib import pyplot

x1 = []
y1 = []

for i in range(1000):
    x1 += [randrange(100)*i]
    y1 += [randrange(100)*i]

pyplot.plot(x1,y1,".")
pyplot.show()

ランダムな数字とインクリメントした数字を掛けた値を1000個作ってリストに入れてグラフ出力しました。

注目して欲しいのは11行目のplotの第3引数に「.」を設定しています。

こうすることで、1つ1つのデータをドット表示するようになります。
ちなみに第3引数は「-」がデフォルトで折れ線グラフとなり、その他「.」「x」「+」「*」「o」などが設定可能です。

こちらを実行してみると下記のような散布図が表示されます。

matplotlibを使った散布図
ポイント

散布図は、plotの第3引数に描画するポイントの形状を指定する

スポンサーリンク

棒グラフの作成

グラフの中で最も一般的に使われるのが「棒グラフ」だと思います。

こちらもpyplotモジュールのbar関数で簡単に作成できます。

pyplot.bar(x軸のデータ, y軸のデータ, tick_label = ラベルデータ)

使い方はこれまでのplot関数と同じで、x軸のデータとy軸のデータを指定すればそれぞれのデータを棒グラフとして描きます。

ただし棒グラフではx軸(グラフの横幅)は数字よりも項目名を表示することが多いと思います。

ですので、この場合はキーワード引数「tick_label=」を設定します。
表示するラベル名のリストをこの引数に設定することで、x軸データの数値の代わりにラベル表示することができます。

では、こちらも簡単な棒グラフを作ってみましょう。

from matplotlib import pyplot

x = range(10)
y = range(500,1000,50)
data = ["2013","2014","2015","2016","2017","2018","2019","2020","2021","2022",]

pyplot.bar(x,y,tick_label=data)
pyplot.show()

10個のデータを棒グラフにして表示しています。
yのデータはrangeを使って500から1000までを50刻みに作成し、ラベルは2013から2022までの文字列のリストをキーワード引数「tick_label=」に設定しています。

こちらを実行すると以下のグラフが表示されます。

matplotlibを使った棒グラフ

このようにデータを用意するだけでほぼ自動的に棒グラフが作成されるのが分かります。

ポイント

棒グラフは、pyplotの「bar」関数で作成する。tick_labelキーワード引数でx軸にラベル表示できる。

スポンサーリンク

円グラフの作成

円グラフはpie関数を使って描くことができます。

pyplot.pie(データ, labels = ラベルデータ)

表示するデータをまとめたリストなどのシーケンスオブジェクトを引数に指定するだけです。

またそれぞれの項目にラベルをつけたい場合は「labels」というキーワード引数にラベル文字列をリストにまとめたものを指定します。

こちらも簡単な円グラフを作ってみましょう。

from matplotlib import pyplot

data = [12300,9800,7600,4500,2100]
label = ["Tokyo","Osaka","Nagoya","Sapporo","kobe",]

pyplot.pie(data,labels=label)
pyplot.legend(loc="upper left")
pyplot.show()

変数dataに円グラフにするデータを設定し、labelに各項目のラベルをまとめて設定します。
これらを引数に指定してpie関数を呼び出しています。

凡例を描写するlegend関数では「loc」というキーワード引数を設定しています。
これは、凡例の表示位置を指定するもので、upper、lower、right、leftといった単語を組み合わせてグラフの四隅のどこかに表示を指定できます。

こちらを実行すると以下となります。

matplotlibを使った円グラフ
ポイント

円グラフは、pyplotの「pie」で作成する。labelsキーワード引数で各項目のラベルを設定できる。

スポンサーリンク

ヒストグラムの作成

多数のデータを集計しグラフ化するのに用いられるのがヒストグラムです。

ヒストグラムは、多数のデータを一定の範囲ごとに集計し表示する必要がありますが、matplotlibを利用すればそうした集計処理も全てmatplotlib自身が自動で行います

ヒストグラムは、hist関数で作成します。

pyplot.hist(データ)

引数は、データをまとめたリストなどのシーケンスを設定します。

こちらも簡単なヒストグラムを作ってみましょう。

from random import randrange
from matplotlib import pyplot

data = []

for i in range(100):
    data += [randrange(100)*i]

pyplot.hist(data)
pyplot.show()

実行するとランダムに作成された100個のデータを元にヒストグラムを作成し表示します。

データはランダムなので、実行するごとに微妙に異なるグラフが描かれます。

matplotlibを使ったヒストグラム

データは特に集計処理などはしておらず、ただ数値をリストにまとめているだけですが、ヒストグラム化はpyplotが自動で行っていることが分かります。

スポンサーリンク

まとめ

今回は、Pythonでの外部ライブラリのグラフ作成のモジュールmatplotlibの利用方法について学びました。