妊婦がプログラマーになるまで

プログラミング未経験ワーママが産休からPythonで機械学習を学ぶ記録を記します。

Pythonライブラリ「Matplotlib」とは?関数一覧(学習メモ)

ライブラリ「Matplotlib」について学んだことをメモします。
f:id:damion_n:20210912220105p:plain

Matplotlib(マットプロットリブ)

f:id:damion_n:20210915111205p:plain
データの可視化(グラフ化)ができるコードを揃えたライブラリ。

Matplotlibで出力できるグラフ例:
・折れ線グラフ
・棒グラフ
ヒストグラム
・散布図
・散布図行列
・ヒートマップ
クラスターマップ
・箱ひげ図

インポート方法は以下のとおり。

import matplotlib.pyplot as plt

似てるけど違うseaborn(シーボーン)

f:id:damion_n:20210915111224p:plain
可視化ライブラリにはもう一つ、seabornが知られる。単純に言うと、Matplotlibよりも使い勝手を良くしてグラフをかっこよくしたものがseabornらしい。

インポート方法は以下のとおり。

import seaborn as sns


seaborn内でmatplotlibを使えることから、以下のようにパッケージとしてインポートすると楽。

# ビジュアル化関係のパッケージ
import matplotlib.pyplot as plt
import seaborn as sns
sns.set() # seaborn使用の設定

グラフを描く基本的な手順

1.グラフを書く「軸」と、それを配置する「図」のインスタンスを取得する。
2.「軸」単位にグラフを描画する。

fig, ax = plt.subplots() # 図と軸インスタンス取得
ax.plot([y[0], y[1]], …) # 軸単位のグラフの設定
ax.set_title(‘Line graph’) # タイトル設定
ax.legend()  # 凡例表示
plt.show() # 描画


・図と軸を1x1で取得したい場合

fig, ax = plt.subplots() # 図と軸(1x1)インスタンス取得

f:id:damion_n:20210915111748p:plain


・図と軸を1x2で取得したい場合

fig, ax = plt.subplots(1, 2) # 図と軸(1x2)インスタンス取得

f:id:damion_n:20210915111834p:plain


・図と軸を2x1で取得したい場合

fig, ax = plt.subplots(2, 1) # 図と軸(2x1)インスタンス取得

f:id:damion_n:20210915111914p:plain


・図と軸を2x2で取得したい場合

fig, ax = plt.subplots(2, 2) # 図と軸(2x2)インスタンス取得

f:id:damion_n:20210915112102p:plain



レイアウトの設定

画像を大きくしたり小さくしたり、 タイトルとグラフが重なってしまうので、余白を大きくしたいなど、デフォルトのデザインを変更する場合は、matplotlib.pyplot.rcParams に設定する。

matplotlib.pyplot.rcParams['設定したいキー'] = 値

例えば、画像サイズを変える場合は以下のとおり。

plt.rcParams['figure.figsize'] = (16.0, 16.0) # 画像サイズの設定

折れ線グラフ

matplotlib.lines.Line2D(xdata, ydata, linewidth=None, linestyle=None, color=None,
                        marker=None, markersize=None, markeredgewidth=None,
                        markeredgecolor=None, markerfacecolor=None,
                        markerfacecoloralt='none',fillstyle=None, antialiased=None,
                        dash_capstyle=None, solid_capstyle=None,
                        dash_joinstyle=None, solid_joinstyle=None, pickradius=5,
                        drawstyle=None, markevery=None, **kwargs)

・xdata (必須) X 軸方向の数値
・ydata (必須) Y 軸方向の数値
・linewidth 線の太さ
・linestyle 線のスタイル。
      ‘solid’ (実線), ‘dashed’ (破線), ‘dashdot’ (破線&点線), ‘dotted’ (点線) から指定。
      (デフォルト値:”solid”)
・color 線の色
・marker マーカーの種類。参考: matplotlib.markers (デフォルト値:”None”)
・markersize  マーカーの大きさ
・markeredgewidth マーカーの枠線の太さ
・markeredgecolor マーカーの枠線の色
・markerfacecolor  マーカーの塗りつぶしの色
・markerfacecoloralt マーカーの塗りつぶしの色 2。
          fillstyle で left, right, bottom, top を指定した際、
          塗りつぶされない領域が ‘markerfacecoloralt’ で指定された色となる。
           (デフォルト値: ‘none’)
・fillstyle  マーカーの塗りつぶしのスタイル。
      ‘full’ (全体), ‘left’ (左半分), ‘right’ (右半分), ‘bottom’ (下半分),
       ‘top’ (上半分), ‘none’ (塗りつぶしなし) から選択。
・antialiased アンチエイリアス (線を滑らかに描画する処理) を適用するかどうか。
       False または True から選択。

データフレームに2列あれば、その2列分が折れ線として表示される。
以下は、weatherというデータファイルの「ave_temp」「ave_vapor_pressure」を2軸として折れ線グラフを描く場合。

weather[['avg_temp', 'avg_vapor_pressure']].plot.line()

f:id:damion_n:20210917101425p:plain


直線グラフ

Axes.plot([x0, x1], [y0, y1]) と記述すると、点(x0, y0) から 点(x1, y1) まで直線が引かれる。

fig, ax = plt.subplots() # 図と軸を取得
ax.plot([0, 12], [0, 12]) # 45度線

f:id:damion_n:20210917101442p:plain



棒グラフ

以下は、weatherというデータファイルの「ave_temp」「ave_vapor_pressure」を棒グラフを描く場合。

weather[['avg_temp', 'avg_vapor_pressure']].plot.bar()

f:id:damion_n:20210917101658p:plain


plot引数をつかうと、軸を指定できる。

fig, ax = plt.subplots(1, 2) # 図と軸(1x2)を取得
weather[['avg_temp']].plot.barh(ax=ax[0])
weather[['avg_vapor_pressure']].plot.bar(ax=ax[1])

f:id:damion_n:20210917101810p:plain


subplots=True で、列ごとに軸を分割することもできる。

weather[['avg_temp', 'avg_vapor_pressure']].plot.bar(subplots=True) # subplots=True で、列ごとに軸を分割

f:id:damion_n:20210917102125p:plain



ヒストグラム

以下は、weatherというデータファイルの「ave_temp」のヒストグラムを描く場合。

weather['avg_temp'].plot.hist()

f:id:damion_n:20210917102313p:plain



散布図

以下は、weatherというデータファイルで、x軸に「平均気温: avg_temp」、y軸に「平均蒸気圧: avg_vapor_pressure」を指定して、散布図を描く場合。

weather.plot.scatter(x='avg_temp', y='avg_vapor_pressure')

f:id:damion_n:20210917102450p:plain



散布図行列

変数が2変数のときは、散布図でよいが、3変数以上になると、いちいち、変数の組み合わせを作り、散布図を描く必要があり面倒なので、散布図行列にすると楽。

以下は、weatherというデータファイルのすべての変数の散布図行列を描く場合。

sns.pairplot(weather.drop('pref_code', axis=1))

f:id:damion_n:20210917103255p:plain



箱ひげ図

matplotlibの箱ひげ図は、外れ値の確認をするのに便利

箱ひげ図のグラフの見方。
・25パーセンタイル=第一四分位数
・50パーセンタイル=第二四分位数
・75パーセンタイル=第三四分位数
f:id:damion_n:20210917103436p:plain

以下は、weatherというデータファイルのすべての変数の箱ひげ図を描く場合。

weather.drop('pref_code', axis=1).boxplot(rot=90) # ID列以外を指定
plt.show()

f:id:damion_n:20210917103742p:plain



ヒートマップ / クラスターマップ

多変数の相関係数を比較するのに、わかりやすくビジュアル化する際使う。

ヒートマップは、データフレームの行の順番通りに出力するが、クラスターマップは、樹形図を追加するため、樹形図が見やすくなるように、変数の順番が入れ替わる。

r = weather.drop('pref_code', axis=1).corr()

sns.heatmap(r.round(1), annot=True)  # ヒートマップ
plt.title('heatmap')
plt.show()

sns.clustermap(r.round(1), annot=True)  # クラスターマップ
plt.title('clustermap')
plt.show()

f:id:damion_n:20210917104507p:plain
f:id:damion_n:20210917104531p:plain



画像や2次元配列の表示

画像や2次元配列を表示する。3次元目は、RGB値やRGBA値を指定。省略したときは、グレースケール。

X については、以下のような2次元または3次元の配列になる。
・(M, N):スカラーデータを含む画像。データはカラーマップを使用して視覚化。
・(M, N, 3):RGB値(0-1 floatまたは0-255 int)の画像。
・(M, N, 4):RGBA値(0-1 floatまたは0-255 int)の画像、つまり透明度を含む。

img = np.linspace(0, 1.0, 25).reshape(5, 5) # 5x5 の配列
print(img)
plt.imshow(img)
plt.gca().grid(False)

f:id:damion_n:20210917104818p:plain





押していただけると励みになります!

にほんブログ村 資格ブログ スキルアップへ
にほんブログ村