Pythonライブラリ「Matplotlib」とは?関数一覧(学習メモ)
ライブラリ「Matplotlib」について学んだことをメモします。
- Matplotlib(マットプロットリブ)
- 似てるけど違うseaborn(シーボーン)
- グラフを描く基本的な手順
- レイアウトの設定
- 折れ線グラフ
- 直線グラフ
- 棒グラフ
- ヒストグラム
- 散布図
- 散布図行列
- 箱ひげ図
- ヒートマップ / クラスターマップ
- 画像や2次元配列の表示
Matplotlib(マットプロットリブ)
データの可視化(グラフ化)ができるコードを揃えたライブラリ。
Matplotlibで出力できるグラフ例:
・折れ線グラフ
・棒グラフ
・ヒストグラム
・散布図
・散布図行列
・ヒートマップ
・クラスターマップ
・箱ひげ図
インポート方法は以下のとおり。
import matplotlib.pyplot as plt
似てるけど違うseaborn(シーボーン)
可視化ライブラリにはもう一つ、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)インスタンス取得
・図と軸を1x2で取得したい場合
fig, ax = plt.subplots(1, 2) # 図と軸(1x2)インスタンス取得
・図と軸を2x1で取得したい場合
fig, ax = plt.subplots(2, 1) # 図と軸(2x1)インスタンス取得
・図と軸を2x2で取得したい場合
fig, ax = plt.subplots(2, 2) # 図と軸(2x2)インスタンス取得
レイアウトの設定
画像を大きくしたり小さくしたり、 タイトルとグラフが重なってしまうので、余白を大きくしたいなど、デフォルトのデザインを変更する場合は、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()
直線グラフ
Axes.plot([x0, x1], [y0, y1]) と記述すると、点(x0, y0) から 点(x1, y1) まで直線が引かれる。
fig, ax = plt.subplots() # 図と軸を取得 ax.plot([0, 12], [0, 12]) # 45度線
棒グラフ
以下は、weatherというデータファイルの「ave_temp」「ave_vapor_pressure」を棒グラフを描く場合。
weather[['avg_temp', 'avg_vapor_pressure']].plot.bar()
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])
subplots=True で、列ごとに軸を分割することもできる。
weather[['avg_temp', 'avg_vapor_pressure']].plot.bar(subplots=True) # subplots=True で、列ごとに軸を分割
散布図
以下は、weatherというデータファイルで、x軸に「平均気温: avg_temp」、y軸に「平均蒸気圧: avg_vapor_pressure」を指定して、散布図を描く場合。
weather.plot.scatter(x='avg_temp', y='avg_vapor_pressure')
散布図行列
変数が2変数のときは、散布図でよいが、3変数以上になると、いちいち、変数の組み合わせを作り、散布図を描く必要があり面倒なので、散布図行列にすると楽。
以下は、weatherというデータファイルのすべての変数の散布図行列を描く場合。
sns.pairplot(weather.drop('pref_code', axis=1))
箱ひげ図
matplotlibの箱ひげ図は、外れ値の確認をするのに便利
箱ひげ図のグラフの見方。
・25パーセンタイル=第一四分位数
・50パーセンタイル=第二四分位数
・75パーセンタイル=第三四分位数
以下は、weatherというデータファイルのすべての変数の箱ひげ図を描く場合。
weather.drop('pref_code', axis=1).boxplot(rot=90) # ID列以外を指定 plt.show()
ヒートマップ / クラスターマップ
多変数の相関係数を比較するのに、わかりやすくビジュアル化する際使う。
ヒートマップは、データフレームの行の順番通りに出力するが、クラスターマップは、樹形図を追加するため、樹形図が見やすくなるように、変数の順番が入れ替わる。
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()
画像や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)
押していただけると励みになります!