LuaPy:matplotlib.pyplot 実例

2016-07-25 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
7、2、0、0、0、 1、0、0、0、0(40)で、換算ポイント 87pt 。
「Firefox」6位ダウン。「化学業界」「硝子業界」「FM COCOLO」「e-radio」、
「グルコサミン」bg値変動。「Perl」「C言語」「Python」「FM青森」変化無し。
・-・ - -・

さて、本文。

前(2016-07-24)の記事「LuaPy:matplotlib 使えそうダ
では、
import sys
sys.path.append('D:/TOOL/WinPython32_2763/python-2.7.6/Lib/lib-tk')
を追加すれば使えそうダ。

と書いた。

その後、
Path 設定を、固定で指定しないで済む方法を見つけた。
つまり、
import sys
w = sys.path
for k in range(len(w)):
if w[k].find('Lib')>0: ww=w[k]; break
sys.path.append( ww + '/lib-tk' )
で大丈夫そうダ。
('Lib'を含むパスは1つのみ?)


それで、
以前(2016-07-04)の記事「LuaPy.dll 改訂」で作った。
“LuaPy_1.dll”を使ったプログラムを作ってみた:
----- Main_LuaPy_plt.gsl ---------------------------
charA = |x| ffi.cast( 'char*', x )
Int = |x| ffi.cast( 'int32_t', x )

LuaPy = ffi.load('LuaPy_1') -- dll 読み込み
ffi.cdef[[
int PyIni( char* ); // Pyファイル名
int PyFun( char*, int, void* ); // 関数名、option、領域
int PyFin( ); // Pyファイナライズ
]]
IT = ffi.new( 'int32_t[5]' ) --------------- インタフェース領域

_ = LuaPy.PyIni( charA('Sub_LuaPy_plt') ) -- Python / ファイル 初期化

x = matrix.vec{ 1, 2, 4, 6 }
y = matrix.vec{ 1, 5, 2, 4 }
IT[0]=4; IT[1]=Int(x.data); IT[2]=Int(y.data) -- データ数、データ

IT[3]=Int(charA("'Title'")) -- 図のタイトル
IT[4]=Int(charA("ls='-', lw=3")) -- 線種(ls= )は省略可だが、太さ(lw= )

-------------------- matplotlib.pyplot ----- で Plot
_ = LuaPy.PyFun( charA('Plot'), 0, IT ) -- 関数指定で呼び出し

_ = LuaPy.PyFin() -- Python ファイナライズ
##### Sub_LuaPy_plt.py ---------------------
# -*- coding: utf-8 -*-

import sys
w = sys.path
for k in range(len(w)):
if w[k].find('Lib')>0: ww=w[k]; break
sys.path.append( ww+'/lib-tk' )

import ctypes as ct
import numpy as np
import matplotlib.pyplot as plt

def IntA(x):
return ct.cast( x, ct.POINTER(ct.c_long) )
def np_data( x ):
return ct.cast( id(x), ct.POINTER(ct.c_long) ) [2]

#######################################################
def Plot( n, p ):
IT = IntA( p )

xx = IT[0]
x = np.zeros( xx, dtype=np.float )
y = np.zeros( xx, dtype=np.float )
_=ct.cdll.msvcrt.memcpy( np_data(x), IT[1], xx*8 )
_=ct.cdll.msvcrt.memcpy( np_data(y), IT[2], xx*8 )

s = ct.create_string_buffer(255)
w=ct.cdll.msvcrt.memcpy(s,IT[3],255)
s0 = s.value
exec('plt.title('+s0+')') # 図のタイトル

s = ct.create_string_buffer(255)
w=ct.cdll.msvcrt.memcpy(s,IT[4],255)
s0 = s.value
exec('plt.plot( x, y, '+s0+')') # 線種(ls= 省略可)、太さ

plt.show() # 画面表示 --- 待ち合わせる
return 0
以上の2本組。

これで、“Main_LuaPy_plt.gsl”を実行すると、
“LuaPy_1.dll”経由で、
“Sub_LuaPy_plt.py”が正常に実行される。

つまり、“matplotlib.pyplot.plot”で折線グラフが表示される。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


160701
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク