Sunday 21 April 2013

gnuplot (8)


object について少しだけ.


データや函数の plot だけではなく, object といわれる,例えば多角形を描くことができます.
(正 n 角形を描くなら極座標で円を描くような命令にして
  set sample n+1
で描いてしまうという荒業があり得るみたいですが…)

ではまず
help object 
で聞いてみると

 Syntax:
     set object <index>
         <object-type> <object-properties>
         {front|back|behind} {fc|fillcolor <colorspec>} {fs <fillstyle>}
         {default} {lw|linewidth <width>} 

で,"それ以降の 2D plot 全部に出てくる object を定義" し,数は何でもいいらしい.
今のところ object-type は rectangle, ellipse, circle もしくは polygon.
rectangle なら set style rectangle, それ以外なら set style fillでの設定を継承するが,
object ごとに設定することもできるとのこと.
front | back | behind については,
front ならそう指定された図形の中で一番後ろ,そうじゃないものよりは上に描画,
back ならほかの曲線とかlabelより後ろに, behind なら軸とか back 指定されたものより後ろに,
という感じになる.
だから例えば
set object rectangle from screen 0,0 to screen 1,1 behind
を描画域全体に背景をつけるのに使えるということだそうだ.

それぞれについて syntax だけ確認しておくと

set object <index> rectangle
         {from <position> {to|rto} <position> |
          center <position> size <w>,<h> |
          at <position> size <w>,<h>}
set object <index> ellipse {at|center} <position> size <w>,<h>
         {angle <orientation>}
         {<other-object-properties>


set object <index> circle {at|center} <position> size <radius>
         {arc [<begin>:<end>]}
         {<other-object-properties>}

set object <index> polygon
         from <position> to <position> ... {to <position>}
 or
         from <position> rto <position> ... {rto <position>}
rto は相対座標で表すときにつかうらしい.

というわけでこのへんを適当につかって(何たる適当!)適当なのを描くと
楕円と三角形と長方形が重なってる.
色指定は fc rgb(brown) とかそんな感じで.
object があってもそれは xrange とか yrange の自動設定の時には無視するみたいなので,
手動でそのへんはやってあげましょう.
あと塗りつぶしの半透明とかそういうのをやってみてもよいでしょうね.
gnuplotでフラクタル図形を描こう - プログラムモグモグとかでも object は使われています.
eval っていうのは,例えば eval "plot sin(x)"plot sin(x) な感じになるとかそういう感じ.
少なくともそういう感じのアレとしてそこでは使われている感じです.
このへんまたその内に.こういう感じなら python とかで .plt 書き下して
それを読み込んでもらうのでもいい気がしますが.

あとグラフ中に「ここ注目やで」みたいな矢印入れたりとか
そういう機能も gnuplot さんは充実しているのでいずれやりたいな,と思うのですが,
多分これはその必要に迫られたときに使ってその結果をここに上げる感じになると思います.
(そもそもこの一連の gnuplot も一回レポートで使った分を忘れないうちに,というのが発端.)

No comments:

Post a Comment