Pythonでのプロットと可視化(matplotlib編) 〜 3−2.図の設定(目盛り、ラベル、凡例、注釈)

前回「Pythonでのプロットと可視化(matplotlib編) 〜 3−1.図の設定(余白、色、マーカー、線種)」の続き。

◎プロットの装飾方法
下記2通りある。

・pyplotインタフェースを使う方法
・matplotlibのネイティブなAPIを使う方法
 ※)「The Matplotlib API」を参照

これらは描画領域に対して使うものだから、アクティブなAxesSubplotか、最後に作られたAxesSubplotに対して作用する。
例えば、xlimの場合は、ax.get_xlimといった具合。

◎目盛り、目盛りのラベル、タイトル、軸のラベルの設定

#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt

### 1.データ準備
data = np.random.randn(1000).cumsum()

### 2.新規ウィンドウの作成
fig = plt.figure()

### 3.ウィンドウへのサブプロットの作成
ax = fig.add_subplot(1, 1, 1)

### 4.サブプロットへのグラフ作成
ax.plot(data)

### 5.サブプロットへ作成したグラフへの各種設定
# 5-1.x軸への目盛り設定位置の指定
ticks  = ax.set_xticks([0, 250, 500, 750, 1000])

# 5-2.指定した目盛り設定位置へのラベル作成
labels = ax.set_xticklabels(['one','two','three','four','five'], rotation=30, fontsize='small')

# 5-3.グラフのタイトル作成
ax.set_title('matplotlib plot')

# 5-4.グラフのX軸ラベル作成
ax.set_xlabel('X-axis')

# 5-5.グラフのY軸ラベルの作成
ax.set_ylabel('Y-axis')

データを準備し、「4.サブプロットへのグラフ作成」を実施してから「5-2.指定した目盛り設定位置へのラベル作成」を実施するまでの結果は次図。

次に、「5-3.グラフのタイトル作成」してから「5-5.グラフのY軸ラベルの作成」するまでの結果は次図。

◎凡例の追加
凡例を追加するには、前回「Pythonでのプロットと可視化(matplotlib編) 〜 3−1.図の設定(余白、色、マーカー、線種)」の最後に少し出てきたplt.legend()を使用するか、ax.legend()を使用する

#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt

### 1.新規ウィンドウの作成
fig = plt.figure()

### 2.ウィンドウへのサブプロットの作成
ax = fig.add_subplot(1, 1, 1)

### 3.グラフ作成
ax.plot(np.random.randn(1000).cumsum(), color='k', linestyle='-',  label='one')
ax.plot(np.random.randn(1000).cumsum(), color='k', linestyle='--', label='two')
ax.plot(np.random.randn(1000).cumsum(), color='k', linestyle='dotted',   label='thre')

### 4.凡例付与の実行
ax.legend(loc='best')

結果は次図。

◎注釈をサブプロットに描画する

注釈やテキストは、textやarrow、annotate関数を使用すると良い

詳しくは「matplotlibのBeginner’s Guide」を参照。

コード例。

### 1.データ準備
data = np.random.randn(1000)*1000

### 2.新規ウィンドウの作成
fig = plt.figure()

### 3.ウィンドウへのサブプロットの作成
ax = fig.add_subplot(1, 1, 1)

### 4.サブプロットへのグラフ作成
ax.plot(data)

### 5.注釈を付ける
# 5-1.textによる注釈
ax.text(0,0,'Annotation1', family='monospace', fontsize=15, color='red')
ax.text(250,-2000,'Annotation2', family='monospace', fontsize=15, color='red')
ax.text(500,3000,'Annotation3', family='monospace', fontsize=15, color='red')
ax.text(950,100,'Annotation4', family='monospace', fontsize=15, color='red')

# 5-2.annotate関数による注釈
ax.annotate(
    'Annotation5',
    xy=(750,-1000),                    #arrowpropsの矢印の終点
    xytext=(750, -1000+1000),          #注釈コメントの位置。arrowprops矢印の始点
    arrowprops=dict(facecolor='red'), #矢印の設定
    horizontalalignment='left',
    verticalalignment='top',
    color='red'
)

結果は次図。

以上。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理