Pythonで「Point & Figure」チャートを描画する。(2)
今回は、Matplotlibのチャート描画の仕組みについてコードを勉強しながら記録していきます。
最低限のチャート作図!?
参考サイトのコード丸写しではPythonista3でエラーが発生して動かなかったので、チャートの表示に関する最低限のコードを残したコメント行にしてみます。
とりあえずウィンドウにチャートイメージだけは表示されました。
ここから1行ずつ勉強しながらコードを修正していきます。
matplotlibのインポート
まず、matplotlibのインポートから。コードは以下のように書きます。
import matplotlib.pyplot as plt
これで、pltというエイリアスでpyplotモジュールの機能が使えるようになります。
matplotlibはデータビジュアライゼーションパッケージのパッケージ全体を指し、pyplotはmatplotlib内のモジュールとして要求するプロットをスクリプトで生成するために自動的に図形や軸を作図するインターフェースとなります。
数値データを扱うのにnumpyが必須となるはずなので、あわせてインポートしておきます。numpyは主に数学的な演算処理で使用するモジュールで、標準でインストールされています。
import numpy as np
import matplotlib.pyplot as plt
グラフの構成要素:Figure
fig = plt.figure(figsize=(5,10))
Figureオブジェクトは、プロットや文字など描画される部品を納めるコンテナとして全ての構成要素の最上位レベルのコンポーネントとなります。
figsizeの引数にサイズ(インチ単位:float, float)を指定することでグラフの大きさを変えることができます。また、dpi(解像度)を引数として指定することもできます。
figsize × dpiの値がグラフを画像にしたときのfigureオブジェクトのピクセルサイズになります。
figure(figsize=(6.4,4.8), dpi=100))とすることで、640×480の画像サイズのグラフが描画されます。
グラフの構成要素:Axes
ax = fig.add_axes([.15, .15, .7, .7])
Axesオブジェクトは、グラフデータがプロットされる領域を示します。tick(軸の単位)やlabel(軸の名前)などの要素も含まれます。
figureインスタンスのadd_axesメソッドでAxesオブジェクトを生成 、グラフの描画位置を指定します。
引数はAxesオブジェクトの位置と大きさを指定するパラメータです。Figureオブジェクトの縦横を「1」とした相対サイズで「left, bottom, width, height」の順で指定します。
left,bottomでAxesの左下隅の位置座標を、width,heightでFigureオブジェクトとの縦横比を指定します。
add_axes((0, 0, 1, 1))でFigureオブジェクト全面にグラフを描画することになります。
グラフの描画
matplotlibによるグラフの描画は、まず、台紙となるFigureオブジェクトを作成し、そこに付箋紙としてAxesオブジェクトを貼り付けて、その付箋紙にチャートをプロットしていくというイメージで捉えると理解しやすいと思います。
コードは以下のとおり微修正しました。
# figureインスタンスを生成
# figsizeで描画サイズ(インチ)を指定)
# dpiで解像度を指定
fig = plt.figure(figsize=(6.4,4.8),dpi=100)
# axesインスタンスを生成
# 位置:figureオブジェクト左下隅から縦横×0.15の位置
# サイズ:figureオブジェクト×0.7倍
ax = fig.add_axes((.15,.15,.7,.7))
このコードで描画されるグラフです。
次回は、実際に数値のプロットしていくことにチャレンジします。