Matplotlib & Seaborn 入門コース | 02.Matplotlibの基本的な使い方 | 折れ線グラフを使って学んでいこう

こんにちは。キノコードです。 この動画では、MatplotlibのMatplotlibの基本的な使い方を線グラフを使って解説をしていきます。 具体的には、線グラフの色の変え方、線グラフの太さの変更、タイトルをつけたり、凡例、注釈をつける方法などを勉強していきます。

Matplotlibとは

Matplotlibとは、グラフを描画するためのPythonライブラリです。
例えば折れ線グラフや棒グラフ、散布図といったデータ分析には欠かせないグラフを作成できます。
それでは、Matplotlibをインポートするところから始めていきましょう。

Matplotlibインポート

まず、Matplotlibをインポートする記述をします。

import matplotlib.pyplot as plt
%matplotlib inline

matplotlibの中のpyplotを読み込みます。
asはライブラリ名を好きな名前で使うことができます。
従って、matplotlibをpltという名前で使用できます。
また、セルの中にグラフを出力させるために%matplotlib inlineを記述します。
実行します。
インポートが完了しました。

グラフ作成

まずは簡単なグラフを書いてみましょう。

x = [1,2,3,4,5]
y = [1,4,9,16,25]

x軸とy軸に数値を代入します。

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

plt.plotの括弧の中に引数として先ほど設定したx、yを渡します。
最後に、plt.showと記述するだけでグラフが作成できます。
実行します。
グラフを作成できました。

ラベル追加

次にx軸やy軸に名前を追加してみましょう。
この名前を「ラベル」と言います。
ここではx軸に「X」、y軸に「Y」とラベルを付けてみましょう。

plt.plot(x,y)

plt.xlabel('X')
plt.ylabel('Y')
plt.show()

ラベルの追加はこのように、labelと書いた後の括弧の中に軸の名前を記述しシングルコーテーションでくくります。
実行します。
ラベルを追加できました。

色変更

次に、グラフの色を変更してみます。

plt.plot( x , y , color='red')

plt.xlabel('X')
plt.ylabel('Y')
plt.show()

plt.plotの括弧の中にcolorを記述し、指定したい色をシングルコーテーションでくくります。
実行します。
グラフの色を変更できました。
redの頭文字を取って「r」のみでも指定できます。

plt.plot( x , y , color='r')

plt.xlabel('X')
plt.ylabel('Y')
plt.show()

実行します。
同じ結果になりました。
他にも、blueはb、greenはg、blackはkと省略ができます。
また、カラーコードを使用することもできます。

plt.plot( x , y , color='#A8C38B')

plt.xlabel('X')
plt.ylabel('Y')
plt.show()

#の後に好きなカラーコードを記述しシングルコーテーションでくくります。
実行します。
指定したカラーコードの色に変更できました。

ライン太さ変更

次に、ラインの太さを設定してみましょう。

plt.plot( x , y , linewidth=5)

plt.xlabel('X')
plt.ylabel('Y')
plt.show()

plt.plotの括弧の中に、linewidthと記述し線の太さを設定できます。
ここでは5ptを示す5を設定してみます。

実行します。
線の太さを変更できました。
1にしてみたらどうでしょうか。

plt.plot( x , y , linewidth=1)

plt.xlabel('X')
plt.ylabel('Y')
plt.show()

実行します。
元の線の太さに近くなりました。
つまり、数字が大きいほど線は太くなり、小さいほど線は細くなります。

マーカー付与

xとyが交わる点にマーカーを付けることもできます。

plt.plot( x , y ,marker="o")

plt.xlabel('X')
plt.ylabel('Y')
plt.show()

markerと記述しダブルコーテーションの中にアルファベットのoを入力します。
実行します。
グラフにマーカーが追加されました。

ラインスタイル変更

次に、ラインのスタイルを変更してみましょう。

plt.plot( x , y , linestyle='dotted' )

plt.xlabel('X')
plt.ylabel('Y')
plt.show()

plt.plotの括弧の中に、linestyleと記述します。ここでは点線を示すdottedを指定してみます。
実行します。
グラフが点線に変わりました。

グラフタイトル追加

次に、グラフのタイトルを追加してみましょう。

plt.plot(x,y)

plt.xlabel('X')
plt.ylabel('Y')
plt.title('グラフタイトル')
plt.show()

plt.titleの括弧の中に好きなタイトル名を記述しシングルコーテーションでくくります。
実行します。
グラフにタイトルが追加されました。

日本語文字化け設定

Matplotlibで日本語を表示させるためには、日本語のフォントをインストールする必要があります。
一度インストールしてしまえば、後は簡単に日本語を表示させることができます。
インストールには様々な方法がありますが、今回は次のような方法でインストールしていきます。
ターミナルを開き、「pip install japanize-matplotlib」を入力してEnterを押します。

pip install japanize-matplotlib

実行します。
インストールが完了しました。
jupyter labに戻り、import japanize_matplotlib と入力します。

import japanize_matplotlib

実行します。
先ほどと同じ記述をしてみます。

plt.plot(x,y)

plt.xlabel('X')
plt.ylabel('Y')
plt.title('グラフタイトル')
plt.show()

実行します。
正常に日本語が表示されました。

複数ライン

次に、複数のラインを表示させてみましょう。

import numpy as np

ここでは、numpyをインポートします。
NumPyとは、高水準の数学関数が豊富で多次元配列なども高速に計算ができるライブラリです。

実行します。

x = np.array([1,2,3,4,5])
y = np.array([1,4,9,16,24])

x軸とy軸に配列を代入します。
実行します。

plt.plot(x, y)
plt.plot(x, y/2)
plt.plot(x, y/3)

plt.xlabel('X')
plt.ylabel('Y')
plt.title('グラフタイトル')

plt.show()

ここでは、yの2分の1と3分の1の大きさのグラフを表示させてみましょう。
実行します。
ラインが3本表示されました。
それぞれのラインのカラーを変更できます。

plt.plot(x, y, color='skyblue')
plt.plot(x, y/2, color='pink')
plt.plot(x, y/3, color='gray')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('グラフタイトル')

plt.show()

plt.plotの括弧の中にcolorを記述し、指定したい色をシングルコーテーションでくくります。
実行します。
カラーを変更できました。

グラフ内凡例表示

次に、グラフの中に凡例を表示させてみましょう。

plt.plot(x, y, color='skyblue', label='A')
plt.plot(x, y/2, color='pink', label='B')
plt.plot(x, y/3, color='gray', label='C')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('グラフタイトル')
plt.legend()
plt.show()

それぞれのライン要素にlabelと記述し、好きな名前を入れてシングルコーテーションでくくります。
凡例を表示させるためには、plt.legendも記述すればよいです。
実行します。
凡例が表示されました。
凡例が少し小さいので、サイズを大きくしてみましょう。

plt.plot(x, y, color='skyblue', label='A')
plt.plot(x, y/2, color='pink', label='B')
plt.plot(x, y/3, color='gray', label='C')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('グラフタイトル')
plt.legend(fontsize=15)
plt.show()

plt.legendの括弧の中でfontsizeを指定できます。
ここでは、fontsize=15とします。
実行します。
凡例が大きく表示されました。

png保存

作成したグラフを、png形式の画像にして保存することもできます。

plt.plot(x, y, color='skyblue', label='A')
plt.plot(x, y/2, color='pink', label='B')
plt.plot(x, y/3, color='gray', label='C')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('グラフタイトル')
plt.legend(fontsize=15)
fig.savefig("graph.png")

plt.savfigの括弧の中に好きなファイル名を記述します。
実行します。
ファイルが作成されました。

棒グラフ

次に、棒グラフを作成してみましょう。

x = [1,2,3,4,5]
y = [10, 20, 30,20,10]
label = ['A','B','C','D','E']
plt.bar(x, y, tick_label=label)

x軸、y軸に数値を代入します。
labelでそれぞれの棒グラフに名前を付けます。
plt.barの括弧の中に引数としてx,yとラベルを記述します。
実行します。
棒グラフを作成できました。
グラフの色を変更してみましょう。

x = [1,2,3,4,5]
y = [10, 20, 30,20,10]
label = ['A','B','C','D','E']
plt.bar(x, y, tick_label=label,color='orange')

plt.barの括弧の中にcolorを記述し、好きな色をシングルコーテーションでくくります。
実行します。
グラフの色を変更できました。

円グラフ

次に、円グラフを作成してみましょう。

%matplotlib inline
import matplotlib.pyplot as plt
value = [15,24,45,55]
label = ['tomato', 'potato', 'carrot', 'onion']
plt.pie(x=value, labels=label, labeldistance=0.6)
plt.show()

value = の後の角括弧の中に、要素の割合を与えます。
それぞれの要素の名前もlabelとして記述します。
plt.pieの括弧の中に引数やオプションを加えます。
labeldistanceは円グラフにラベルを表示させるためのオプションです。0を原点、1を円周として位置を指定できます。
実行します。
円グラフを作成できました。
円グラフに%(パーセンテージ)を表示させてみましょう。

value = [15,24,45,55]
label = ['tomato', 'potato', 'carrot', 'onion']
plt.pie(x=value, labels=label, autopct='%.1f%%')
plt.show()

autopct=の後に小数点以下1桁までを表示させる記述をします。
実行します。
パーセンテージが表示されました。
一つの要素を切り出してみましょう。

value = [15,24,45,55]
label = ['tomato', 'potato', 'carrot', 'onion']

plt.pie(x=value, labels=label, autopct='%.1f%%', explode=[0.3, 0, 0, 0])
plt.show()

plt.pieの括弧の中にexplodeと記述します。
先ほど、円の中心が0、円周が1と説明しました。
同じ要領で角括弧の中には、一つ目の要素が円の中心から0.3だけ離すことを意味する0.3と設定し、他の要素は0とします。
実行します。
1つ目の要素のみ切り出されました。

3分割グラフ

次に、棒グラフ、折れ線グラフ、散布図を同じグラフの中で3分割して表示させてみましょう。

x = [1,2,3]
y = [10, 20, 30]
label = ['A','B','C']
plt.figure(figsize=(9,3))
plt.subplot(1,3,1)
plt.bar(x,y) #棒グラフ
plt.subplot(1,3,2) #折れ線グラフ
plt.plot(x,y)
plt.subplot(1,3,3) #散布図
plt.scatter(x,y)
plt.suptitle('Three Graphs') #グラフタイトル
plt.show()

ますx、yに適当な数値を与え、ラベルはABCとします。
次にFigsizeを設定しましょう。ここでは9と3にします。
plt.subplotでグラフ領域を3分割にする記述をします。
丸括弧の中に1,3,1と記述します。
最初の1は縦方向を分割する数です。今回は横に3つ並べたいので1とします。
次の3は横方向に分割する記述です。3つのグラフを並べたいので3とします。
最後はグラフを配置する位置を示すインデックスです。最初のグラフの番号なので1です。
棒グラフ、線グラフ、散布図のそれぞれの記述をします。
棒グラフはbar,折れ線グラフはplot,散布図はscatterです。
最後にタイトルを付けます。
実行します。
3種類のグラフが出力できました。

2軸グラフ

次に、棒グラフに折れ線グラフを重ねて表示させた2軸グラフを表示させてみましょう。

x = np.array([1, 2, 3, 4, 5])
y1 = np.array([5, 10, 20, 25, 40]) #棒グラフ用
y2 = np.array([50, 100, 200, 250, 200]) #折れ線グラフ用

#第一軸(ax1)と第二軸(ax2)を関連付けるfig, ax1 = plt.subplots()
ax2 = ax1.twinx()

# 第一軸:棒グラフ、第二軸:折れ線グラフ
ax1.bar(x, y1, label='bar' )
ax2.plot(x, y2, linewidth=2, color="red", linestyle="solid", marker="o", markersize=8, label='line')

#y軸の範囲
ax1.set_ylim([0,50])
ax2.set_ylim([0,300])

#表示順
ax1.set_zorder(1) #折れ線グラフを前面に
ax2.set_zorder(2)

ax1.patch.set_alpha(0) #棒グラフが消えてしまうのを防ぐために折れ線グラフの背景を透明に

#凡例
ax1.legend(bbox_to_anchor=(0, 1), loc='upper left', fontsize=12)
ax2.legend(bbox_to_anchor=(0, 0.9), loc='upper left', fontsize=12)

#グリッド
ax1.grid()
ax1.set_axisbelow(True)

#軸ラベル
plt.xlabel('X')
ax1.set_ylabel('Y1')
ax2.set_ylabel('Y2')
sns.set()
plt.show()

Seabornを使ってグラフを作成してみましょう。
Seabornはグラフを描画するためのライブラリですが、Matplotlibのみで描くよりも見た目の美しいグラフを作成できます。
標準ではインストールされていないので、まずはSeabornライブラリをインストールしましょう。
Windowsの方はAnaconda Prompt、MacOSの場合はターミナルを開いて以下を実行しインストールします。

conda install seaborn

インストールが完了しました。
先ほど作成したグラフにSeabornを追加してみましょう。

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
%matplotlib inline

sns.set()

x = np.array([1,2,3,4,5])
y = np.array([1,4,9,16,24])

plt.plot(x,y,label='A')
plt.plot(x,y/2,label='B')
plt.plot(x,y/3,label='C')

plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

import seaborn as sns でインポートします。
Seabornを描画するためにsns.set括弧閉じを記述します。
これだけで、Seabornのグラフが作成できます。
実行します。
背景色とグリッドが追加され、見た目の綺麗なグラフになりました。
このようにSeabornは、簡単な記述でより良い見た目のグラフを作成できます。
sns.setの括弧の中に様々なオプションを追加できます。

sns.set(style='whitegrid')
x = np.array([1,2,3,4,5])
y = np.array([1,4,9,16,24])

plt.plot(x,y,label='A')
plt.plot(x,y/2,label='B')
plt.plot(x,y/3,label='C')

plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

style=の後にwhitegridと記述しシングルコーテーションで囲みます。
実行します。
背景が白のグリッドに変更されました。

sns.set(style='white')
x = np.array([1,2,3,4,5])
y = np.array([1,4,9,16,24])

plt.plot(x,y,label='A')
plt.plot(x,y/2,label='B')
plt.plot(x,y/3,label='C')

plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

whiteとすると、グリッドを消すことができます。

レッスンで使ったファイル

■保存方法
Mac:右クリック⇒「リンク先を別名で保存」
Windows:右クリック⇒「名前を付けてリンク先を保存」

Jupyter Labのファイルはこちら