SuperMongoで上限値/下限値をプロットする方法

よく論文なんかで、「これは上限値ですよ」ってことを表すために下向き矢印を添えてプロットしてるような図を見かけるのですが、そのようなプロットもSuperMongoのマクロdraw_arrowを使えばさっと描けるようです。


たとえば、

1 2
3 4
7 8

っていうtest.dataがすべて上限値で、それぞれの点で横線引いて下向きに長さ1の矢印を描きたいとします。このとき、次のようなマクロarrow.smを作ってあげればよいようです*1

arrow
               location 7000 25000 5000 23000 # xmin xmax ymin ymax
               #
               limits   0.0 10.0 0.0 10.0
               ticksize 1.0 5.0 1.0 5.0
               #
               #---------------------------------------------------
               #
               lweight 2.0
               expand 1.3
               box 1 2
               expand 1.0
               #
               lweight 2.0
               expand 1.5
               xlabel X
               ylabel Y
               expand 1.0
               #
               #---------------------------------------------------
               #
               data test.data
               read { x1 1  x2 2}
               #
               expand 2.0
               ptype 2 4
               points x1 x2 
               expand 1.0
               #
               set dimen(xtmp1) = 1
               set dimen(xtmp2) = 1
               set dimen(xtmp3) = 1
               set dimen(xtmp4) = 1
               #
               do i=0, dimen(x1)-1 {
                 set xtmp1[0] = x1[$i]
                 set xtmp2[0] = x2[$i]
                 set xtmp3[0] = x1[$i]
                 set xtmp4[0] = x2[$i]-1  # -1を変えれば、いろんな長さの矢印が描けます。
                 #
                 ctype default
                 ltype 0
                 lweight 3.0
                 draw_arrow xtmp1[0] xtmp2[0] xtmp3[0] xtmp4[0]
                 ctype default
                 #
               }
               #
               ctype default
               ltype  0
               lweight 2.0


これを出力すると、こんな感じになります。


*1:オリジナルのサンプルはボス提供です、ありがとうございました☆