Lua & gnuplot:gnuplot モジュール改訂

2017-06-26 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
昨年末(2016-12-12)の記事「Lua & gnuplot : gnuplot モジュール初版」で、
  ・・・・・
  ・・・・・
  “gnuplot”モジュールの初版を完成させた。
  ・・・・・
  ・・・・・
と書いている。

その後、色々と活用していたが、
不都合が見つかった。

なので、
今回インターフェイスは変えずに、若干の改訂を行った。


1.生成する数値のフォーマットを変更

 次の2つの関数:
 ・gp.Data( b, n, x, y )
 ・gp.DataBlk( BN, b, n, x, y, ... )
 において、
 現状では %.3f としているが、桁数不足だった。
 かといって、%15.9f とかでは、ムダな場合をある。

 そこで、%g にした。


2.フォント指定を変更

 次の3つの関数:
 ・gp.Open( )
 ・gp.Open( 'ファイル名' )
 ・gp.Pdf( 'PDFファイル名' )
 では、現状“sans”としており、

 ・gp.Title( 'タイトル文字列' [ , <フォントサイズ> ] )
 ・gp.Xlabel( 'X軸ラベル' [ , <フォントサイズ> ] )
 ・gp.Ylabel( 'Y軸ラベル' [ , <フォントサイズ> ] )
 では、現状“serif”としていた。

 これらを、"Arial”に変更/統一した。


結果は:
local gp = {}

local SF = string.format
local SS = string.sub
local function split_path( p ) return string.match( p, "(.-)([^\\]-([^%.]+))$" ) end

function gp.Open( fn )
if fn == nil then
GP = io.popen( 'gnuplot -persistent', 'w' ) ----- ファイル名無し:画面出力
else
local Dir, FN, ext = split_path( fn )
if ext ~= 'plt' then FN = FN..'.plt' end ----- .plt 無し なら付加する
GP = io.open( FN, 'w' )
end
GP:write( 'set term wxt size 800, 600\n' ) ----- 窓サイズ
GP:write( 'set term wxt font "Arial,12"\n' ) ----- フォント
GP:write( 'set size 1.0, 0.98\n' ) ----- グラフサイズ
end

function gp.Pdf( fn )
local Dir, FN, ext = split_path( fn )
if ext ~= 'pdf' then FN = FN..'.pdf' end ----- .pdf 無し なら付加する
GP:write( 'set term pdf size 8, 6\n' ) ----- ページサイズ
GP:write( 'set term pdf font "Arial,12"\n' ) ----- フォント
GP:write( SF('set output "%s"\n', FN ) ) ----- PDFファイル名
end

function gp.Close() ----- ファイルclose
GP:close()
end

function gp.Com( c ) ----- 任意の コマンド用
GP:write( SF('%s\n', c ) ) ----- コマンド&パラメータ
end

function gp.Set( s ) ----- set コマンド用
GP:write( SF('set %s\n', s ) ) ----- パラメータ
end

function gp.UnSet( s ) ----- unset コマンド用
GP:write( SF('unset %s\n', s ) ) ----- パラメータ
end

function gp.Table( fn )
if fn == nil then
GP:write( SF('set table\n', fn ) ) ----- table コマンド用
elseif SS(fn,1,1) == '$' then
GP:write( SF('set table %s\n', fn ) )
else
GP:write( SF('set table "%s"\n', fn ) )
end
end

function gp.Title( t, s )
if s == nil then s = 36 end
GP:write( SF('set title "%s"\n', t ) ) ----- タイトル
GP:write( SF('set title font "Arial,%d"\n', s ) ) ----- フォント
end

function gp.Xlog()
GP:write( 'set logscale x\n' ) ----- 対数目盛
end

function gp.Xlabel( L, s )
if s == nil then s = 20 end
GP:write( SF('set xlabel "%s"\n', L ) ) ----- ラベル
GP:write( SF('set xlabel font "Arial,%d"\n', s ) ) ----- フォント
end

function gp.Xrange( s )
GP:write( SF('set xrange %s\n', s ) ) ----- 範囲
end

function gp.Ylog()
GP:write( 'set logscale y\n' ) ----- 対数目盛
end

function gp.Ylabel( L, s )
if s == nil then s = 20 end
GP:write( SF('set ylabel "%s"\n', L ) ) ----- ラベル
GP:write( SF('set ylabel font "Arial,%d"\n', s ) ) ----- フォント
end

function gp.Yrange( s )
GP:write( SF('set yrange %s\n', s ) ) ----- 範囲
end

function gp.KeyOff()
GP:write( 'set key off\n' ) ----- 凡例無し
end

function gp.Plot( p ) ----- 引数そのママ
GP:write( SF('plot %s\n', p ) ) ----- Plot コマンド
end

function gp.RePlot( p )
GP:write( SF('replot %s\n', p ) ) ----- replot
end

function gp.Data( b, n, x, y ) ----- b:origin
local px, py = x, y
if b==0 then ----- 1 or 0
px, py = ffi.cast('double*', x ), ffi.cast('double*', y )
end
for k=b,n-(1-b) do
GP:write( SF('%g %g\n', px[k], py[k] ) )
end
GP:write( 'e\n' )
end

function gp.DataBlk( BN, b, n, x, y, ... ) ----- BN:Block名
local t, pt = {...}, {} ----- 3列以上は、b==0 の場合のみ可
local px, py = x, y ----- b==1 では無視
if b==0 then
px, py = ffi.cast('double*', x ), ffi.cast('double*', y )
for i,p in ipairs(t) do pt[i]=ffi.cast('double*', t[i] ) end
end
GP:write( SF('%s << EOD\n', BN ) )
for k=b,n-(1-b) do
GP:write( SF('%g %g', px[k], py[k] ) )
for i,_ in ipairs(pt) do GP:write( SF(' %g', pt[i][k] ) ) end
GP:write( '\n' )
end
GP:write( 'EOD\n' )
end

return gp
となった。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


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


170425,0521
関連記事
スポンサーサイト

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
08 | 2017/09 | 10
- - - - - 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
ブックマーク