matplotlibでグラフを描画【入門】

f:id:oshvchvc:20190818125619p:plain

matplotlibの初歩的な利用方法についてGoogle Colabo(Googleが提供するPython実行環境)にまとめたので、はてなブログにも同内容を掲載しておきます。

 

コードをそのままコピペしたり、実行してみたい方はGoogleアカウントでこちらにアクセスすれば確認できます。

matplotlibでグラフを描画【入門】

 

練習のため、アンスコムのデータセットを可視化してみました。
seabornライブラリからロードできるアンスコムのデータセットは、可視化に最適なデータです。

平均値、分散、相関、回帰直線がどれも等しくなるように人工的に作成されたこのデータセットを利用していきます。

 

 

## アンスコムのデータセットをロードして中身を確認

import seaborn as sns
anscombe = sns.load_dataset("anscombe")

print(anscombe.head())
print(anscombe.tail())

---(実行結果)---
dataset x y
0 I 10.0 8.04
1 I 8.0 6.95
2 I 13.0 7.58
3 I 9.0 8.81
4 I 11.0 8.33
dataset x y
39 IV 8.0 5.25
40 IV 19.0 12.50
41 IV 8.0 5.56
42 IV 8.0 7.91
43 IV 8.0 6.89

 

## dataset{I-IV}の平均値、分散、相関の要約統計量を確認してみる

print('\n\n 【平均】{0}'.format(anscombe.groupby(['dataset']).mean()))
print('\n\n 【分散】{0}'.format(anscombe.groupby(['dataset']).var()))
print('\n\n 【相関】{0}'.format(anscombe.groupby(['dataset']).corr()))

---(実行結果)---
【平均】 x y
dataset
I 9.0 7.500909
II 9.0 7.500909
III 9.0 7.500000
IV 9.0 7.500909

【分散】 x y
dataset
I 11.0 4.127269
II 11.0 4.127629
III 11.0 4.122620
IV 11.0 4.123249

【相関】 x y
dataset
I x 1.000000 0.816421
y 0.816421 1.000000
II x 1.000000 0.816237
y 0.816237 1.000000
III x 1.000000 0.816287
y 0.816287 1.000000
IV x 1.000000 0.816521
y 0.816521 1.000000

 

 

matplotlibを使ってみる
matplotlibのプロット機能を利用する方法はちょっとクセがある
matplotlibライブラリ下のpyplotサブパッケージにすべてのプロットユーティリティが入っているため、matplotlib.pyplotをpltとしてインポートしておく
GoogleColaboやjpyter notebookでmatplotlibの描画を実行する時には、「%matplotlib inline」を実行しておく必要がある

 

import matplotlib.pyplot as plt
%matplotlib inline

## dataset I だけを取り出して描画する
dataset_1 = anscombe.query('dataset == "I"')

## plt.plotはデフォルトではデータ点を線で結ぶ
plt.plot(dataset_1['x'], dataset_1['y'])

f:id:oshvchvc:20190818132138p:plain

 

## 散布図
## データ点をポイントで描画したいときはパラメータを'o'で設定する
plt.plot(dataset_1['x'], dataset_1['y'], 'o')

f:id:oshvchvc:20190818132301p:plain

 

サブプロットを作成する
matplotlibではサブプロットを作成して複数の図を配置した一つの図を作成することができる
今回は4つあるデータセットをサブプロットを配置することで1つの図として作成する
subplotを使う構文では以下の3つの項目を指定する

 - 図でサブプロットに使う行数

 - 図でサブプロットに使う列数

 - このサブプロットの位置

サブプロットの位置は、1から始まる連続した番号で指定する
プロットは、まず左から右へ、そして上から下へ、順に配置される

 

## まずは中身を格納せずにプロット用の場所を確保して描画する

## サブプロットを入れる全体図オブジェクトを作成する
fig = plt.figure() # matplotlib.pyplot.figure()

## 全体図オブジェクトにサブプロットの配置を伝える
## ここではプロットを2行2列に並べる

## サブプロットaxes1を2行2列のうちの位置1に置く
axes1 = fig.add_subplot(2, 2, 1)

## サブプロットaxes2を2行2列のうちの位置2に置く
axes2 = fig.add_subplot(2, 2, 2)

## サブプロットaxes3を2行2列のうちの位置3に置く
axes3 = fig.add_subplot(2, 2, 3)

## サブプロットaxes4を2行2列のうちの位置4に置く
axes4 = fig.add_subplot(2, 2, 4)

 

f:id:oshvchvc:20190818132450p:plain 

## dataset{II ~ IV}についても取り出す
dataset_2 = anscombe.query('dataset == "II"')
dataset_3 = anscombe.query('dataset == "III"')
dataset_4 = anscombe.query('dataset == "IV"')

## それぞれのプロット領域にplotメソッドを使うことでプロットを作成する
axes1.plot(dataset_1['x'], dataset_1['y'], 'o')
axes2.plot(dataset_2['x'], dataset_2['y'], 'o')
axes3.plot(dataset_3['x'], dataset_3['y'], 'o')
axes4.plot(dataset_4['x'], dataset_4['y'], 'o')

f:id:oshvchvc:20190818132559p:plain

 

 

図の各部に関してはmatplotlibのドキュメントも参考にしたい

Tutorials > Introductory > Usage Guide

https://matplotlib.org/tutorials/introductory/usage.html

  より

f:id:oshvchvc:20190818132754p:plain