プログラム未経験者がデータ分析に使う「Matplotlib」を勉強してみた

blue click pen near white document papers on top of brown wooden table

今回は「Numpy」、「Pandas」に続いて、勉強中のデータ分析に利用するためのツール「Matplotlib」の内容について、勉強したことを忘れないように備忘録として残しておきます。

以前の記事はこちらです。

あわせて読みたい
プログラム未経験者がデータ分析に使う「Numpy」を勉強してみた 現在勉強中のPythonによるデータ分析の教科書の中にある、Numpyの使い方を自分の備忘録とNumpy勉強中の人の参考になればと書いてます。 内容は順次追加していく予定です...
あわせて読みたい
プログラム未経験者がデータ分析に使う「Pandas」を勉強してみた (2021/4/23に更新しました) 今回は勉強中のデータ分析に利用するためのツール「Pandas」の内容について、勉強したことを忘れないように備忘録として残しておきます。 も...

もし、Matplotlibの設定であれどうやるんだっけ?って時の参考になればと思います。
可能な限り実行しながら実例を記載してます。

目次

環境

  • Windows10
  • Python 3.8.1
  • jupyter 1.0.0
  • jupyter-client 6.1.7
  • jupyter-console 6.2.0
  • jupyter-core 4.7.0
  • jupyterlab-pygments 0.1.2
  • matplotlib 3.3.3

事前準備

Matplotlibを利用するときは初めに「matplotlib」モジュールをインポートしてください。
またMatplotlibはグラフを表示するためのライブラリなので、「Jupyter Notebook」を使ってプログラムを実行してください。

モジュール:import matplotlib.pyplot as plt

各種設定

実行した結果はすべてJupyter Notebookの出力結果を載せています。

グラフを書く

まずは何も表示しないグラフを書いてみます。

使い方
  • plt.subplots()
x = [1, 2, 3]
y = [2, 4, 9]

fig, ax = plt.subplots()

ax.plot(x, y)
ax.set_title('Title')

plt.show()

ここでは、x軸に「1,2,3」のデータをy軸に「2,4,9」のデータを入れて、棒グラフを表示します。

結果

 

20210331_pythoh_matplotlib01.png

こんな感じで棒グラフが書けます。

簡単にコードの説明だけしておくと、まずMatplotlibでグラフを書く場合には、描画オブジェクト(figure)を生成して、その中に1つ以上のサブプロット(subplot)を置きます。

「fig, ax = plt.subplots()」のコードでは、1つの描画オブジェクトを生成し、1つのサブプロットを配置しています。

簡単に説明すると、一つの枠の中に、1つのグラフを入れているというイメージです。

なので、先ほどの「plt.subplots()」の引数に2を入れる「plt.subplots(2)」と2つのサブプロットつまり、2つのグラフを入れることになります。

その他のコードも簡単に説明します。

  • ax.plot(x, y):plotと指定することで棒グラフにしています
  • ax.set_title(‘Title’):「Title」というタイトルをつけています
  • plt.show():グラフを表示させています

タイトルをつける

グラフにタイトルをつけるには「suptitle」や「set_title」を使います。

使い方

描画オブジェクトにタイトルをつける

  • 描画オブジェクト変数.suptitle(‘タイトル’)

サブプロットにタイトルをつける

  • タイトルをつけるサブプロット変数.set_title(‘タイトル’)
x = [1, 2, 3]
y = [2, 4, 9]

fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット

ax.plot(x, y)
fig.suptitle('suptitle')
ax.set_title('sub_plot_title')

plt.show()

ここでは、描画オブジェクトに「suptitle」、サブプロットに「sub_plot」とします。

結果
20210331_pythoh_matplotlib02.png

タイトルがつきました。

もしサブプロットが複数個ある場合は次のようにしてタイトルを付けます。

  • タイトルをつけるサブプロット変数[インデックス番号].set_title(‘タイトル’)
    例)ax[0].set_title(‘sub_plot_title’)

軸にラベルをつける

軸にラベルをつけるには「set_xlabel」や「set_ylabel」を使います。

使い方

X軸にラベルをつける

  • サブプロット変数.set_xlabel(‘X軸ラベル’)

Y軸にラベルをつける

  • サブプロット変数.set_ylabel(‘Y軸ラベル’)
x = [1, 2, 3]
y = [2, 4, 9]

fig, ax = plt.subplots()#fig:描画オブジェクト、ax:サブプロット

ax.plot(x, y) #折れ線グラフ

ax.set_xlabel('x_Label') #X軸ラベル
ax.set_ylabel('y_Label') #Y軸ラベル

plt.show()

ここでは、X軸に「x_Label」、Y軸に「y_Label」とします。

結果
20210331_pythoh_matplotlib03.png

凡例を表示する

サブプロットに凡例を表示するには、データ描画時に「label」引数を使い、表示するときに「legend」メソッドを使います。

使い方
  • サブプロット変数.plot(label =’凡例のラベル’)
    サブプロット変数.legend(凡例の場所)
x = [1, 2, 3]
y = [2, 4, 9]

fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット

ax.plot(x, y, label='legend_label') #折れ線グラフ
ax.legend(loc='best') #凡例表示

plt.show()

ここでは、凡例に「legend_label」と指定して「loc=’best’」を使って凡例の場所は他のデータと重ならないように表示させています。
※ちなみに「best」はデフォルトなので指定しなくても一番いいとこに表示してくれます。

結果
20210331_pythoh_matplotlib04.png

その他の凡例の場所の指定方法は次のようなものがあります。

  • upper left:左上
  • upper right:右上
  • lower left:左下
  • lower right:右下
  • center:真ん中

さらに詳しい内容を知りたい場合は以下のサイトを参照ください。

公式サイト:matplotlib.pyplot.legend

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

作成したグラフを出力する場合は「savefig」メソッドを使います。

使い方
  • 描画オブジェクト変数.savefig(‘出力ファイル名.拡張子’)
fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット

fig.savefig('sample-figure.png')

ここでは、「sample-figure.png」ファイルを出力してます。

結果

実行したフォルダの直下に指定した名前の画像ファイルができています。

「png」以外にも、「pdf」や「svg」なども利用できます。

さらに詳しい内容を知りたい場合は以下のサイトを参照ください。

公式サイト:matplotlib.pyplot.savefig

色んなグラフを出力する

今までは折れ線グラフだけを使ってきましたが、他のグラフ種類も利用できます。

グラフ種類
  • 折れ線グラフ
  • 棒グラフ
  • 散布図
  • ヒストグラム
  • 箱ひげ図(まだ未作成)
  • 円グラフ

折れ線グラフ

まずは折れ線グラフから見ていきます。

使い方
  • サブプロット変数.plot(X軸の値, Y軸の値)
x = [1, 2, 3]
y1 = [2, 4, 9]
y2 = [3, 4, 5]

fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット

ax.plot(x, y1) #折れ線グラフ
ax.plot(x, y2) #折れ線グラフ

plt.show()

ここでは、2種類のグラフを描画しています。

結果
20210331_pythoh_matplotlib05.png

棒グラフ

棒グラフを書くには「bar」メソッドを使います。

使い方
  • サブプロット変数.bar(X軸の値, Y軸の値)
x = [1, 2, 3]
y = [2, 4, 9]

fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット
labels = ['blog', 'youtube', 'twitter'] #ラベル

ax.bar(x, y, tick_label=labels) #棒グラフ。ラベルを使う場合は「tick_label」を指定する。

plt.show()

ここでは、棒グラフを作成して「blog,youtube,twitter」というラベルを作成して描画します。

結果
20210331_pythoh_matplotlib07.png

散布図

散布図を描画するには「scatter」メソッドを使います。

使い方
  • サブプロット変数.scatter(X軸の値, Y軸の値)
import numpy as np
fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット

x = np.random.rand(50)
y = np.random.rand(50)

ax.scatter(x, y) #散布図

plt.show()

ここでは、x,yにランダムな数字を50個作成して散布図を描画します。

結果
20210331_pythoh_matplotlib08.png
補足情報

散布図で表示されている「●」は「marker」引数を使って変更することができます。

使う場合は以下のようにします。

例)ax.scatter(x[0:10], y[0:10), maker=’^’) #散布図

他にもいろんなマーカーがあります。詳細は以下のサイトを参照ください。

matplotlib.markers

  • marker一覧(抜粋)
marker 結果
.
v
^
<
>

ヒストグラム

ヒストグラムを描画するには「hist」メソッドを使います。

使い方
  • サブプロット変数.hist(配列データ)
import numpy as np
fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット

mu = 1500 #平均値
sigma = 200  #標準偏差

x = np.random.normal(mu, sigma, 2000)

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

plt.show()

ここでは、numpyで正規分布に従う乱数を生成するnormal関数で数字を2000個作成して散布図を描画します。

結果
20210331_pythoh_matplotlib09.png

このようにヒストグラムを描画できました。

ちなみにビン(棒の数のこと)を指定することもできます。(デフォルトでは10個)
指定する場合は引数に「bins=40」とします。

例)ax.hist(x, bins=40)

こんな感じです。
他にもグラフを横向きにしたい場合は「orientation=’horizontal’」を指定したり、「color」を使うことで色を変えたりできます。

もっと詳しく知りたい方は公式サイトを参照ください。

matplotlib.pyplot.hist

円グラフ

円グラフを描画するには「pie」メソッドを使います。

使い方
  • サブプロット変数.hist(配列データ)
x = [10, 200, 300]

fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット
labels = ['blog', 'youtube', 'twitter']

ax.pie(x, labels=labels) #円グラフ

plt.show()

ここでは、x変数の円グラフをラベルを付けて描画します。

結果
x = [10, 200, 300]  fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット labels = ['blog', 'youtube', 'twitter']  ax.pie(x, labels=labels) #円グラフ  plt.show()

こんな感じで円グラフになります。

ちなみに引数で「startangle=90」を指定すると頂点から描画を始めることができます。

ax.pie(x, labels=labels, startangle=90) #円グラフ

他にも色んな引数があります。

その他の引数(サンプル)
内容 引数
頂点から描画する startangle=90
時計回りに描画する counterclock=False
グラフに影をつける shadow=True
%表記で割合をグラフに描画する(●●%) autopct=’%1.2f%%’
2番目グラフの一部を切り離して描画する explode=[0, 0.1, 0]

以上がグラフの種類の説明でした。

気を付けないといけないのは、時計回りにする時は「counterclock=False」にすることです。
デフォルトはTrueで半時計周りなので間違えないようにしましょう。

その他共通で使える引数

今まで記載したものは基本だけなので、以下は、よく利用するその他に共通で使える引数です。

内容 引数
マーカーを変える maker=’o’, maker=’1′
色を変える color=’aqua’, color=’#0000FF’
線の種類を変更する linestyle=’–‘, linestyle=’:’
線の幅を変更する linewidth=2

ちなみに「マーカー、色変更、線の種類変更」の引数は一括で指定することも可能です。その場合は変数に次の順番に決められたフォーマットで指定します。

‘[marker][line][color]’

以下は、makerを「▼」、lineを「–」、colorを「緑色」の例です。

例)fmt = ‘1–g’

色んなパラメータがあるので、興味があれば公式サイトから確認してみてください。下記の「Other Parameters:」の「**kwargs」にパラメータの種類が載っています。

matplotlib.pyplot.plot

上記に記載したものを全部使ってみます。

x = [10, 200, 300]
y = [2, 4, 6]

fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット

fmt = '1--g'

ax.plot(x, y, fmt, linewidth=2)
plt.show()
結果

 

20210331_pythoh_matplotlib11.png

下矢印は小さくて見えずらいですが、ちゃんと指定した通りになりました。

Matplotlib公式サイト

Matplotlib

本日はここまでとなります。
これからも追加していきますので、定期的に見に来ていただければと思います。

参考にしている本

[amazon asin=”4798158348″ kw=”Pythonによるあたらしいデータ分析の教科書”]

以上です。ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

30歳未経験からネットワークエンジニアに転職し、運用→構築→設計の仕事をやってます。色んな機器(Cisco、YAMAHA、Fortigate、PaloAlto)を触らせてもらいとても楽しい仕事です!

現在は派遣にて主にCiscoを中心としたネットワーク設計~構築をしております。

また、2023年より副業で個人事業主や小規模企業からのパソコン設定~ネットワーク作業の仕事を請け負っておりますので、もしお困りの方がいましたらお気軽にお問い合わせください。

●今までの作業履歴
- パソコンの新旧入れ替え
- 拠点間のインターネットVPN接続(YAMAHA-Fortigate)

コメント

コメントする

目次