見出し画像

Pythonで「Point & Figure」チャートを描画する。(1)

「Pythonista3」でP&Fチャート(ポイント&フィギュア)の描画に挑戦してみようと思います。

参考にしたのは以下のサイトです。

参考サイトのコードからPythonを勉強しながらチャート描画までの試行錯誤を記録していきます。

新規Scriptファイルの作成

Pythonista3 を起動して、Scriptファイルを新規作成します。

画像1

Script with UIという項目を選択し、UIファイルとそれを利用するScriptファイルをセットで作成します。Scriptファイル名は「PFChart」として作成しました。

新規Scriptファイルの内容

ファイルを作成すると「PFChart.py」と「PFChart.pyui」という2つのファイルが作成されます。

画像2

画像3

Scriptファイル作成時に自動的に記述されているコードを見てみます。

import ui

v = ui.load_view()
v.present(‘Sheet’)

(1)「UI」モジュールをインポート
 ユーザーインターフェースの部品は全て「UI」モジュールに格納されているので、まずこれをインポートしておく必要があります。

(2)「pyui」ファイルをロード
 引数にファイル名を指定して「UI」ファイルをロードします。引数を省略した場合、Scriptファイルと同じ名前の「pyui」ファイルがロードされます。
 ロードされたデータは、変数「v」にViewクラスのインスタンスとして返されます。

(3)View インスタンスを画面に表示
 引数に表示するViewインスタンスのスタイルを指定します。
 ‘Sheet’ は、一般的なアプリとして表示するスタイルです。スタイルには他に ’full_screen’ (フルスクリーン)や ‘sidebar’ (サイドバー)などがあります。

Matplotlibとは?

Scriptファイル作成後、コードを書いていくのですが、まず、Pythonでチャートを描画するためのライブラリ「matplotlib」をインポートする必要があります。matplotlibは、Pythonでグラフを描画したり、チャートイメージを表示させるためのモジュールで、様々なグラフを描画するための標準的なライブラリです。オープンソースで公開されており、個人/商用を問わず、無料で利用することができます。

線グラフ、棒グラフ、3Dグラフなどを描画することができ、数値計算ライブラリであるNumPyと組み合わせて利用する場合が多くなります。

Pythonista3に「matplotlib」はデフォルトでインストールされています。インタラクティブコンソールでインストールされている「matplotlib」のバージョンを確認することができます。

画面右端から内側に向かってゆっくりスワイプしてコンソール画面を引き出して入力フィールドに次のコマンドを入力します。

import matplotlib as mpl
mpl.__version__

画像4

画像6

画像6

インストールされている「Matplotlib」のデフォルトバージョンは” 1.4.0 “ でした。最新のバージョンが “ 3.3.0 “なので相当古いですが、、、

コードを実行してみる・・・

とりあえず参考にしたサイトのコードを何も考えずに書いてみることにします。さて、Pythonista3 で動くのか・・・?

import matplotlib.pyplot as plt 

BOX = 5 
START = 365 
changes = (8, -3, 4, -4, 12, -3, 7, -3, 5, -9, 3) 

# one way to force dimensions is to set the figure size: 
fig = plt.figure(figsize=(5, 10)) 

# another way is to control the axes dimensions 
# for axes to have specific dimensions: 
#     [ x0, y0, w, h] in figure units, from 0 to 1 
# ax = fig.add_axes([.15, .15, .7*.5, .7]) 
ax = fig.add_axes([.15, .15, .7, .7]) 

def sign(val): 
   return val/abs(val) 

pointChanges = [] 
for chg in changes: 
   pointChanges += [sign(chg)] * abs(chg) 

symbol = {-1:'o', 
     1:'x'} 

chgStart = START 
for ichg, chg in enumerate(changes): 
   x = [ichg+1] * abs(chg) 
   y = [chgStart + i * BOX * sign(chg) for i in range(abs(chg))] 
   chgStart += BOX * sign(chg) * (abs(chg)-2) 
   ax.scatter(x, y, 
      marker=symbol[sign(chg)], 
      s=175) #<----- control size of scatter symbol 

ax.set_xlim(0, len(changes)+1) 
fig.savefig('pointandfigure.png') 
plt.show() 

やはり、、、エラーが表示されて動きません。
Pythonista3のデバック方法もまだ分からないので、1行ずつ勉強しながらコードを修正していきます。。。

画像7

色々と調べながら書いているから時間かかります。。。

次回は、matplotlibを使って、まずはグラフ画面が表示できるようにコードを修正します。



いいなと思ったら応援しよう!