ruby-pgplot 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README +100 -0
- data/README.ja +91 -0
- data/cogen.rb +157 -0
- data/demo/pgdemo1.rb +414 -0
- data/demo/pgdemo15.rb +78 -0
- data/demo/pgdemo3.rb +188 -0
- data/demo/pgdemo4.rb +80 -0
- data/demo/pgdemo9.rb +44 -0
- data/depend +4 -0
- data/extconf.rb +97 -0
- data/kwarg.c +78 -0
- data/rb_pgplot.c.in +1266 -0
- data/test/pgband.rb +21 -0
- data/test/pgcurs.rb +14 -0
- data/test/pggray.rb +21 -0
- data/test/pglcur.rb +14 -0
- data/test/pgline.rb +13 -0
- data/test/pgncur.rb +14 -0
- data/test/pgolin.rb +14 -0
- data/test/pgtick.rb +12 -0
- metadata +97 -0
data/README
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
Ruby/PGPLOT ver 0.1.4 by Masahiro TANAKA 2012-01-04
|
2
|
+
|
3
|
+
= Description
|
4
|
+
|
5
|
+
* Ruby interface to PGPLOT.
|
6
|
+
It provides PGPLOT functions as a Ruby module.
|
7
|
+
|
8
|
+
= Requirement
|
9
|
+
|
10
|
+
* PGPLOT ver 5.2.x
|
11
|
+
(http://astro.caltech.edu/~tjp/pgplot/)
|
12
|
+
* Libraries which PGPLOT drivers use:
|
13
|
+
** X11 library
|
14
|
+
** PNG library
|
15
|
+
** GrWin Graphics Library for MS-Windows.
|
16
|
+
(http://spdg1.sci.shizuoka.ac.jp/grwinlib/english/)
|
17
|
+
* Ruby ver 1.8.x/1.9.x
|
18
|
+
* NArray ver 0.5.x/0.6.x
|
19
|
+
(http://www.ruby-lang.org/en/raa-list.rhtml?name=NArray)
|
20
|
+
|
21
|
+
= Installation
|
22
|
+
|
23
|
+
* install PGPLOT library
|
24
|
+
|
25
|
+
- FORTRAN77 compiler required for source-compile.
|
26
|
+
- C interface library (libcpgplot.a) is also required.
|
27
|
+
|
28
|
+
* install Ruby, NArray
|
29
|
+
|
30
|
+
* install Ruby/PGPLOT
|
31
|
+
|
32
|
+
- extract distribution.
|
33
|
+
|
34
|
+
- compile and install by:
|
35
|
+
|
36
|
+
ruby extconf.rb [options (see below)]
|
37
|
+
make
|
38
|
+
make site-install
|
39
|
+
(or make install)
|
40
|
+
|
41
|
+
- Options for `ruby extconf.rb':
|
42
|
+
--with-pgplot-include=path : path to cpgplot.h
|
43
|
+
--with-pgplot-lib=path : path to PGPLOT libraries.
|
44
|
+
--with-x11-dir=path : path to X11
|
45
|
+
--with-grwin : for using GrWin (cygwin/mingw).
|
46
|
+
--with-sunws : PGPLOT is compiled with Sun WorkShop f77.
|
47
|
+
gfortran is assumed without this option.
|
48
|
+
|
49
|
+
example:
|
50
|
+
ruby extconf.rb --with-x11-dir=/usr/X11R6 \
|
51
|
+
--with-pgplot-include=/usr/local/pgplot \
|
52
|
+
--with-pgplot-lib=/usr/local/pgplot
|
53
|
+
|
54
|
+
= Usage
|
55
|
+
|
56
|
+
* Environment variables for PGPLOT (csh):
|
57
|
+
|
58
|
+
setenv PGPLOT_DIR /usr/local/lib/pgplot/ # pgxwin_server, rgb.txt
|
59
|
+
setenv PGPLOT_FONT ${PGPLOT_DIR}/grfont.dat
|
60
|
+
setenv PGPLOT_DEV /xwin
|
61
|
+
|
62
|
+
* To load the Ruby/PGPLOT extension;
|
63
|
+
|
64
|
+
require "pgplot"
|
65
|
+
|
66
|
+
* Module name is `Pgplot'. If you want to omit the module name;
|
67
|
+
|
68
|
+
include Pgplot
|
69
|
+
|
70
|
+
* Pgplot module method names are lower case of corresponding
|
71
|
+
PGPLOT functions. To start plotting:
|
72
|
+
|
73
|
+
pgbeg('/xwin')
|
74
|
+
|
75
|
+
See PGPLOT manual for function usage.
|
76
|
+
Arguments are not always same as the FORTRAN PGPLOT.
|
77
|
+
"FuncUsage" file includes a list of functions with
|
78
|
+
different arguments.
|
79
|
+
|
80
|
+
= Platforms tested
|
81
|
+
|
82
|
+
* ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
|
83
|
+
* ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux]
|
84
|
+
* NArray 0.6.0.1
|
85
|
+
* gcc/gfortran version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC)
|
86
|
+
|
87
|
+
= License
|
88
|
+
|
89
|
+
This program is free software.
|
90
|
+
You can distribute/modify this program
|
91
|
+
under the same terms as Ruby itself.
|
92
|
+
NO WARRANTY.
|
93
|
+
|
94
|
+
= Acknowledgment
|
95
|
+
|
96
|
+
M.T. thanks to Tim Pearson for developing the useful PGPLOT library
|
97
|
+
and giving me the permission to distribute the Ruby version of pgdemos.
|
98
|
+
M.T. also thanks to the developers of the Ruby language
|
99
|
+
for providing the wonderful language.
|
100
|
+
|
data/README.ja
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
Ruby/PGPLOT ver 0.1.4 by Masahiro TANAKA 2012-01-04
|
2
|
+
|
3
|
+
= 概要
|
4
|
+
|
5
|
+
* PGPLOTをRubyから使うための拡張ライブラリ。
|
6
|
+
|
7
|
+
= 必要なもの
|
8
|
+
|
9
|
+
* PGPLOT ver 5.2.x
|
10
|
+
(http://astro.caltech.edu/~tjp/pgplot/)
|
11
|
+
* PGPLOTのドライバが使うライブラリ (必要に応じて):
|
12
|
+
** X11ライブラリ
|
13
|
+
** PNGライブラリ
|
14
|
+
** GrWinグラフィクスライブラリ for MS-Windows (Cygwinでのみ動作確認)
|
15
|
+
(http://spdg1.sci.shizuoka.ac.jp/grwinlib/)
|
16
|
+
* Ruby ver 1.8.x/1.9.x
|
17
|
+
* NArray ver 0.5.x/0.6.x
|
18
|
+
(http://www.ruby-lang.org/en/raa-list.rhtml?name=NArray)
|
19
|
+
|
20
|
+
= インストール方法
|
21
|
+
|
22
|
+
* PGPLOT をインストール
|
23
|
+
|
24
|
+
- FORTRAN77が必要です (gfortranでもOK)。
|
25
|
+
- C言語インタフェースライブラリ(cpgplot)を作成する必要があります。
|
26
|
+
|
27
|
+
* Ruby, NArray をインストール
|
28
|
+
|
29
|
+
* Ruby/PGPLOT をインストール
|
30
|
+
|
31
|
+
- ソースを展開
|
32
|
+
|
33
|
+
- コンパイル・インストール:
|
34
|
+
ruby extconf.rb [オプション(下記参照)]
|
35
|
+
make
|
36
|
+
make site-install
|
37
|
+
(または make install)
|
38
|
+
|
39
|
+
- ruby extconf.rb のオプション:
|
40
|
+
--with-pgplot-include=path : cpgplot.hのディレクトリ。
|
41
|
+
--with-pgplot-lib=path : PGPLOTライブラリのディレクトリ。
|
42
|
+
--with-x11-dir=path : X11のpath
|
43
|
+
--with-grwin : for using GrWin (cygwin/mingw).
|
44
|
+
--with-sunws : PGPLOTをSun WorkShopのf77を使って
|
45
|
+
コンパイルした場合。指定しない時はg77。
|
46
|
+
例:
|
47
|
+
ruby extconf.rb --with-x11-dir=/usr/X11R6 \
|
48
|
+
--with-pgplot-include=/usr/local/pgplot \
|
49
|
+
--with-pgplot-lib=/usr/local/pgplot
|
50
|
+
|
51
|
+
= 使用方法
|
52
|
+
|
53
|
+
* PGPLOTの環境変数設定(csh)
|
54
|
+
|
55
|
+
setenv PGPLOT_DIR /usr/local/lib/pgplot/ # pgxwin_server, rgb.txt
|
56
|
+
setenv PGPLOT_FONT ${PGPLOT_DIR}/grfont.dat
|
57
|
+
setenv PGPLOT_DEV /xwin
|
58
|
+
|
59
|
+
* 拡張ライブラリをロードするには:
|
60
|
+
|
61
|
+
require "pgplot"
|
62
|
+
|
63
|
+
* モジュール名は`Pgplot'です。モジュール名を省略したいときは:
|
64
|
+
|
65
|
+
include Pgplot
|
66
|
+
|
67
|
+
* Pgplotモジュールのメソッドは、PGPLOTの関数と同じ名前(小文字)です。
|
68
|
+
プロットを開始するには:
|
69
|
+
|
70
|
+
pgbeg('/xwin')
|
71
|
+
|
72
|
+
詳細は PGPLOTのマニュアルを参照して下さい。
|
73
|
+
引数は必ずしもFORTRAN版と同じではありません。
|
74
|
+
引数が違う関数のリストは、"FuncUsage"というファイルにあります。
|
75
|
+
|
76
|
+
= 動作確認
|
77
|
+
|
78
|
+
* ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
|
79
|
+
* ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux]
|
80
|
+
* NArray 0.6.0.1
|
81
|
+
* gcc/gfortran version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC)
|
82
|
+
|
83
|
+
= 配布条件
|
84
|
+
|
85
|
+
Ruby本体と同じです。
|
86
|
+
無保証です。
|
87
|
+
|
88
|
+
= 謝辞
|
89
|
+
|
90
|
+
PGPLOTを開発し、Ruby版pgdemoの配布許可を下さった Tim Pearson氏
|
91
|
+
に感謝します。Ruby開発に携わった皆様に感謝します。
|
data/cogen.rb
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
# cogen.rb : Code generation script for Ruby/PGPLOT
|
2
|
+
#
|
3
|
+
# Copyright (c) 2000,2001 Masahiro TANAKA <masa@ir.isas.ac.jp>
|
4
|
+
#
|
5
|
+
# This program is free software.
|
6
|
+
# You can distribute/modify this program
|
7
|
+
# under the same terms as Ruby itself.
|
8
|
+
# NO WARRANTY.
|
9
|
+
|
10
|
+
$pgfuncs = %w(
|
11
|
+
|
12
|
+
pgend::
|
13
|
+
pgbbuf::
|
14
|
+
pgebuf::
|
15
|
+
pgpage::
|
16
|
+
pgpap:1,1:
|
17
|
+
pgupdt::
|
18
|
+
pgpanl:1,1:
|
19
|
+
pgclos::
|
20
|
+
|
21
|
+
pgbox:2,1,0,2,1,0:
|
22
|
+
pgtbox:2,1,0,2,1,0:
|
23
|
+
pgvsiz:1,1,1,1:
|
24
|
+
pgvstd::
|
25
|
+
pgwnad:1,1,1,1:
|
26
|
+
pgsubp:0,0:
|
27
|
+
|
28
|
+
pgwedg:2,1,1,1,1,2:
|
29
|
+
|
30
|
+
# Draw Funcs
|
31
|
+
pgdraw:1,1:
|
32
|
+
pgmove:1,1:
|
33
|
+
pgrect:1,1,1,1:
|
34
|
+
pgarro:1,1,1,1:
|
35
|
+
pgcirc:1,1,1:
|
36
|
+
pgpt1:1,1,0:
|
37
|
+
pgerr1:0,1,1,1,1:
|
38
|
+
pglab:2,2,2:
|
39
|
+
pgptxt:1,1,1,1,2:
|
40
|
+
pgtext:1,1,2:
|
41
|
+
pgmtxt:2,1,1,1,2:
|
42
|
+
pgetxt::
|
43
|
+
|
44
|
+
pgiden::
|
45
|
+
pgldev::
|
46
|
+
pgsave::
|
47
|
+
pgunsa::
|
48
|
+
pgeras::
|
49
|
+
|
50
|
+
# Set Funcs
|
51
|
+
pgsch:1:
|
52
|
+
pgscf:0:
|
53
|
+
pgsci:0:
|
54
|
+
pgsfs:0:
|
55
|
+
pgsls:0:
|
56
|
+
pgslw:0:
|
57
|
+
pgsclp:0:
|
58
|
+
pgsitf:0:
|
59
|
+
pgslct:0:
|
60
|
+
pgstbg:0:
|
61
|
+
pgscr:0,1,1,1:
|
62
|
+
pgshls:0,1,1,1:
|
63
|
+
pgsah:0,1,1:
|
64
|
+
pgscrl:1,1:
|
65
|
+
pgscir:0,0:
|
66
|
+
pgscrn:0,2:0
|
67
|
+
pgshs:1,1,1:
|
68
|
+
pgsvp:1,1,1,1:
|
69
|
+
pgswin:1,1,1,1:
|
70
|
+
|
71
|
+
# Query Funcs
|
72
|
+
pgqch::1
|
73
|
+
pgqcf::0
|
74
|
+
pgqci::0
|
75
|
+
pgqfs::0
|
76
|
+
pgqls::0
|
77
|
+
pgqlw::0
|
78
|
+
pgqclp::0
|
79
|
+
pgqid::0
|
80
|
+
pgqitf::0
|
81
|
+
pgqndt::0
|
82
|
+
pgqtbg::0
|
83
|
+
pgqcr:0:1,1,1
|
84
|
+
pgqvp:0:1,1,1,1
|
85
|
+
pgqwin::1,1,1,1
|
86
|
+
pgqcol::0,0
|
87
|
+
pgqcir::0,0
|
88
|
+
pgqpos::1,1
|
89
|
+
pgqvsz:0:1,1,1,1
|
90
|
+
|
91
|
+
).grep(/:.*:/).collect{|i| i.split(":",3)}
|
92
|
+
|
93
|
+
|
94
|
+
def pgfuncgen(name, inp, out)
|
95
|
+
inp = inp.split(",").collect{|i| i.to_i}
|
96
|
+
out = out.split(",").collect{|i| i.to_i}
|
97
|
+
ninp = inp.size
|
98
|
+
nout = out.size
|
99
|
+
# int->0, float->1
|
100
|
+
val2 = ["NUM2INT","NUM2DBL","StringValuePtr"]
|
101
|
+
type = ["int","float",nil]
|
102
|
+
conv = ["INT2NUM","rb_float_new",nil]
|
103
|
+
# Initialize Array
|
104
|
+
prot = ["VALUE obj"]
|
105
|
+
pass = []
|
106
|
+
vars = []
|
107
|
+
retn = []
|
108
|
+
inp.each_with_index { |i,x|
|
109
|
+
prot << "VALUE arg#{x}"
|
110
|
+
pass << "#{val2[i]}(arg#{x})"
|
111
|
+
}
|
112
|
+
out.each_with_index { |i,x|
|
113
|
+
vars << "#{type[i]} var#{x};"
|
114
|
+
pass << "&var#{x}"
|
115
|
+
retn << "#{conv[i]}(var#{x})"
|
116
|
+
}
|
117
|
+
if nout==0 then
|
118
|
+
retn = "Qtrue";
|
119
|
+
elsif nout>1 then
|
120
|
+
retn = "rb_ary_new3(#{nout},"+retn.join(",")+")"
|
121
|
+
else
|
122
|
+
retn = retn.join("")
|
123
|
+
end
|
124
|
+
|
125
|
+
vars = vars.join("")
|
126
|
+
prot = prot.join(",")
|
127
|
+
pass = pass.join(",")
|
128
|
+
|
129
|
+
return "
|
130
|
+
static VALUE
|
131
|
+
rb_pgplot_#{name}(#{prot})
|
132
|
+
{
|
133
|
+
#{vars}
|
134
|
+
c#{name}(#{pass});
|
135
|
+
return #{retn};
|
136
|
+
}
|
137
|
+
"
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
def cogen_pgplot
|
142
|
+
fin = open("rb_pgplot.c.in","r")
|
143
|
+
fout = open("rb_pgplot.c","w")
|
144
|
+
while l = fin.gets
|
145
|
+
if /--- auto-generated funcs will be placed here ---/ =~ l
|
146
|
+
$pgfuncs.each{|x| fout.print pgfuncgen(*x)}
|
147
|
+
elsif /--- auto-generated defs will be placed here ---/ =~ l
|
148
|
+
$pgfuncs.each{|x|
|
149
|
+
n = x[1].split(",").size
|
150
|
+
fout.print " rb_define_module_function(mPgplot,\"#{x[0]}\",rb_pgplot_#{x[0]},#{n});\n"}
|
151
|
+
else
|
152
|
+
fout.print
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
cogen_pgplot
|
data/demo/pgdemo1.rb
ADDED
@@ -0,0 +1,414 @@
|
|
1
|
+
require 'narray'
|
2
|
+
require 'pgplot'
|
3
|
+
include Pgplot
|
4
|
+
include NMath
|
5
|
+
PI = Math::PI
|
6
|
+
TWOPI = PI*2
|
7
|
+
BLACK,WHITE,RED,GREEN,BLUE,CYAN,MAGENT,YELLOW = (0..7).to_a
|
8
|
+
FULL,DASH,DOTDSH,DOTTED,FANCY = (1..5).to_a
|
9
|
+
NORMAL,ROMAN,ITALIC,SCRIPT = (1..4).to_a
|
10
|
+
SOLID,HOLLOW = (1..2).to_a
|
11
|
+
|
12
|
+
# ====== Utility function ======
|
13
|
+
|
14
|
+
def indgen arg
|
15
|
+
if arg.kind_of?(Range)
|
16
|
+
return NArray.sfloat(arg.size).indgen!(arg.first)
|
17
|
+
elsif arg.kind_of?(Numeric)
|
18
|
+
return NArray.sfloat(arg).indgen!
|
19
|
+
else
|
20
|
+
raise ArgumentError, "invalid argument"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def randomn n=1
|
25
|
+
rr = NArray.sfloat(n)
|
26
|
+
xx = NArray.sfloat(n)
|
27
|
+
idx= NArray.int(n).indgen!
|
28
|
+
i = 0
|
29
|
+
while i<n
|
30
|
+
x = NArray.sfloat(n*4/3).random!(1) * 2 - 1
|
31
|
+
y = NArray.sfloat(n*4/3).random!(1) * 2 - 1
|
32
|
+
r = x**2 + y**2
|
33
|
+
idx = (r<1).where
|
34
|
+
siz = [n-i,idx.size-1].min
|
35
|
+
rr[i] = r[idx[0...siz]]
|
36
|
+
xx[i] = x[idx[0...siz]]
|
37
|
+
#printf "i=%d,siz=%d,idx.size=%d\n",i,siz,idx.size
|
38
|
+
i += siz
|
39
|
+
end
|
40
|
+
return xx * sqrt(-2*log(rr)/rr)
|
41
|
+
end
|
42
|
+
|
43
|
+
# ====== Demo function ======
|
44
|
+
|
45
|
+
def pgex0
|
46
|
+
%w(
|
47
|
+
version
|
48
|
+
state
|
49
|
+
user
|
50
|
+
now
|
51
|
+
device
|
52
|
+
file
|
53
|
+
type
|
54
|
+
dev/type
|
55
|
+
hardcopy
|
56
|
+
terminal
|
57
|
+
cursor
|
58
|
+
).each{|i| print " ",i," = ",pgqinf(i),"\n"}
|
59
|
+
|
60
|
+
x1,x2,y1,y2 = pgqvsz(1)
|
61
|
+
x = x2-x1
|
62
|
+
y = y2-y1
|
63
|
+
printf " Plot dimensions (x,y; inches): %9.2f, %9.2f
|
64
|
+
(mm): %9.2f, %9.2f\n",x, y, x*25.4, y*25.4
|
65
|
+
end
|
66
|
+
|
67
|
+
def pgex1
|
68
|
+
pgenv 0, 10, 0, 20, 0, 1
|
69
|
+
pglab '(x)', '(y)', 'PGPLOT Example 1: y = x\u2'
|
70
|
+
|
71
|
+
xs = [1.0,2.0,3.0,4.0,5.0]
|
72
|
+
ys = [1.0,4.0,9.0,16.0,25.0]
|
73
|
+
pgpt xs,ys,9
|
74
|
+
|
75
|
+
n = 60
|
76
|
+
xr = indgen(n)*0.1
|
77
|
+
yr = xr**2
|
78
|
+
pgline xr, yr
|
79
|
+
end
|
80
|
+
|
81
|
+
def pgex2
|
82
|
+
pgenv -2.0,10.0,-0.4,1.2, 0,1
|
83
|
+
pglab '(x)', 'sin(x)/x', 'PGPLOT Example 2: Sinc Function'
|
84
|
+
|
85
|
+
xr = (indgen(100)-20.5)/6.0
|
86
|
+
yr = sin(xr)/xr
|
87
|
+
pgline xr, yr
|
88
|
+
end
|
89
|
+
|
90
|
+
def pgex3
|
91
|
+
pgenv 0.0,720.0,-2.0,2.0, 0,-2
|
92
|
+
pgsave
|
93
|
+
pgsci 14
|
94
|
+
pgbox 'G',30.0, 0,'G', 0.2, 0
|
95
|
+
pgsci 5
|
96
|
+
pgbox 'ABCTSN',90.0, 3,'ABCTSNV', 0.0,0
|
97
|
+
pgsci 3
|
98
|
+
pglab 'x (degrees)','f(x)','PGPLOT Example 3'
|
99
|
+
|
100
|
+
xr = indgen(360) * 2
|
101
|
+
arg= xr/180*PI
|
102
|
+
yr = sin(arg) + cos(arg*2)*0.5 + cos(arg*1.5+PI/3)*0.5
|
103
|
+
|
104
|
+
pgsci 6
|
105
|
+
pgsls 2
|
106
|
+
pgslw 3
|
107
|
+
pgline xr, yr
|
108
|
+
pgunsa
|
109
|
+
end
|
110
|
+
|
111
|
+
def pgex4
|
112
|
+
seed = -5678921
|
113
|
+
data = randomn(1000)
|
114
|
+
pgsave
|
115
|
+
pghist data, 31, -3.1..3.1, 0
|
116
|
+
data = randomn(200)*0.5 + 1
|
117
|
+
pgsci 15
|
118
|
+
pghist data, 31, -3.1..3.1, 3
|
119
|
+
pgsci 0
|
120
|
+
pghist data, 31, -3.1..3.1, 1
|
121
|
+
pgsci 1
|
122
|
+
pgbox 'BST', 0.0, 0, ' ', 0.0, 0
|
123
|
+
|
124
|
+
pglab 'Variate', ' ','PGPLOT Example 4: Histograms (Gaussian)'
|
125
|
+
|
126
|
+
x = indgen(620)*0.01 - 3.1
|
127
|
+
y = exp(-(x**2)*0.5) * (0.2*1000/sqrt(2*PI))
|
128
|
+
|
129
|
+
pgline x,y
|
130
|
+
pgunsa
|
131
|
+
end
|
132
|
+
|
133
|
+
def pgex5
|
134
|
+
np=15
|
135
|
+
freq = NArray[ 26.0, 38.0, 80.0, 160.0, 178.0, 318.0, 365.0, 408.0,
|
136
|
+
750.0, 1400.0, 2695.0, 2700.0, 5000.0, 10695.0, 14900.0 ]
|
137
|
+
flux = NArray[ 38.0, 66.4, 89.0, 69.8, 55.9, 37.4, 46.8, 42.4, 27.0,
|
138
|
+
15.8, 9.09, 9.17, 5.35, 2.56, 1.73 ]
|
139
|
+
err = NArray[ 6.0, 6.0, 13.0, 9.1, 2.9, 1.4, 2.7, 3.0, 0.34, 0.8,
|
140
|
+
0.2, 0.46, 0.15, 0.08, 0.01 ]
|
141
|
+
pgsave
|
142
|
+
pgsci CYAN
|
143
|
+
pgenv -2.0,2.0,-0.5,2.5,1,30
|
144
|
+
pglab 'Frequency, \gn (GHz)',
|
145
|
+
'Flux Density, S\d\gn\u (Jy)',
|
146
|
+
'PGPLOT Example 5: Log-Log plot'
|
147
|
+
x = indgen(100)*0.03 + 1.3
|
148
|
+
xp = x-3
|
149
|
+
yp = -x*1.15 - exp(-x)*7.72 + 5.18
|
150
|
+
pgsci RED
|
151
|
+
pgline xp,yp
|
152
|
+
|
153
|
+
xp = log10(freq)-3.0
|
154
|
+
yp = log10(flux)
|
155
|
+
pgsci GREEN
|
156
|
+
pgpt xp,yp,17
|
157
|
+
|
158
|
+
yhi = log10(flux+2*err)
|
159
|
+
ylo = log10(flux-2*err)
|
160
|
+
pgerry xp,ylo,yhi
|
161
|
+
pgunsa
|
162
|
+
end
|
163
|
+
|
164
|
+
def pgex6
|
165
|
+
twopi = PI*2
|
166
|
+
npol = 6
|
167
|
+
|
168
|
+
n1 = [ 0, 3, 4, 5, 5, 6, 8 ] # index-0 is dummy
|
169
|
+
n2 = [ 0, 1, 1, 1, 2, 1, 3 ]
|
170
|
+
lab = [ '', 'Fill style 1 (solid)',
|
171
|
+
'Fill style 2 (outline)',
|
172
|
+
'Fill style 3 (hatched)',
|
173
|
+
'Fill style 4 (cross-hatched)']
|
174
|
+
pgbbuf
|
175
|
+
pgsave
|
176
|
+
pgpage
|
177
|
+
pgsvp 0.0, 1.0, 0.0, 1.0
|
178
|
+
pgwnad 0.0, 10.0, 0.0, 10.0
|
179
|
+
pgsci 1
|
180
|
+
pgmtxt 'T', -2.0, 0.5, 0.5,
|
181
|
+
'PGPLOT fill area: routines PGPOLY, PGCIRC, PGRECT'
|
182
|
+
|
183
|
+
for k in 1..4
|
184
|
+
pgsci 1
|
185
|
+
y0 = 10.0 - 2.0*k
|
186
|
+
pgtext 0.2, y0+0.6, lab[k]
|
187
|
+
pgsfs k
|
188
|
+
for i in 1..npol
|
189
|
+
pgsci i
|
190
|
+
angle = indgen(n1[i])*(n2[i]*twopi/n1[i])
|
191
|
+
x = cos(angle)*0.5 + i
|
192
|
+
y = sin(angle)*0.5 + y0
|
193
|
+
pgpoly x,y
|
194
|
+
end
|
195
|
+
pgsci 7
|
196
|
+
pgcirc 7.0, y0, 0.5
|
197
|
+
pgsci 8
|
198
|
+
pgrect 7.8, 9.5, y0-0.5, y0+0.5
|
199
|
+
end
|
200
|
+
pgunsa
|
201
|
+
pgebuf
|
202
|
+
end
|
203
|
+
|
204
|
+
def pgex7
|
205
|
+
pgbbuf
|
206
|
+
pgsave
|
207
|
+
pgsci 1
|
208
|
+
pgenv 0.0,5.0, -0.3,0.6, 0,1
|
209
|
+
pglab '\fix', '\fiy', 'PGPLOT Example 7: scatter plot'
|
210
|
+
|
211
|
+
xs = NArray.sfloat(300).random!(1.0)*5
|
212
|
+
ys = randomn(300)*0.05 + xs*exp(-xs)
|
213
|
+
|
214
|
+
pgsci 3
|
215
|
+
pgpt xs[0..99],ys[0..99], 3
|
216
|
+
pgpt xs[100..199],ys[100..199], 17
|
217
|
+
pgpt xs[200..299],ys[200..299], 21
|
218
|
+
|
219
|
+
xr = indgen(101)*0.05
|
220
|
+
yr = xr*exp(-xr)
|
221
|
+
pgsci 2
|
222
|
+
pgline xr,yr
|
223
|
+
|
224
|
+
xp = xs[100]
|
225
|
+
yp = ys[100]
|
226
|
+
xsig = 0.2
|
227
|
+
ysig = 0.1
|
228
|
+
pgsci 5
|
229
|
+
pgsch 3.0
|
230
|
+
pgerr1 5, xp, yp, xsig, 1.0
|
231
|
+
pgerr1 6, xp, yp, ysig, 1.0
|
232
|
+
pgpt1 xp,yp,21
|
233
|
+
pgunsa
|
234
|
+
pgebuf
|
235
|
+
end
|
236
|
+
|
237
|
+
def pgex8
|
238
|
+
pgpage
|
239
|
+
pgbbuf
|
240
|
+
pgsave
|
241
|
+
pgsvp(0.1,0.6,0.1,0.6)
|
242
|
+
pgswin(0.0, 630.0, -2.0, 2.0)
|
243
|
+
pgsci(CYAN)
|
244
|
+
pgbox('ABCTS', 90.0, 3, 'ABCTSV', 0.0, 0)
|
245
|
+
pgsci(RED)
|
246
|
+
pgbox('N',90.0, 3, 'VN', 0.0, 0)
|
247
|
+
xr = indgen(360)*2
|
248
|
+
yr = sin(xr/57.29577951)
|
249
|
+
pgsci(MAGENT)
|
250
|
+
pgsls(DASH)
|
251
|
+
pgline(xr,yr)
|
252
|
+
pgswin(90.0, 720.0, -2.0, 2.0)
|
253
|
+
pgsci(YELLOW)
|
254
|
+
pgsls(DOTTED)
|
255
|
+
pgline(xr,yr)
|
256
|
+
pgsls(FULL)
|
257
|
+
pgsvp(0.45,0.85,0.45,0.85)
|
258
|
+
pgswin(0.0, 180.0, -2.0, 2.0)
|
259
|
+
pgsci(0)
|
260
|
+
pgrect(0.0, 180.0, -2.0, 2.0)
|
261
|
+
pgsci(BLUE)
|
262
|
+
pgbox('ABCTSM', 60.0, 3, 'VABCTSM', 1.0, 2)
|
263
|
+
pgsci(WHITE)
|
264
|
+
pgsls(DASH)
|
265
|
+
pgline(xr,yr)
|
266
|
+
pgunsa
|
267
|
+
pgebuf
|
268
|
+
end
|
269
|
+
|
270
|
+
def pgex9
|
271
|
+
pgbbuf
|
272
|
+
pgsave
|
273
|
+
pgsci(5)
|
274
|
+
#pgfunt(fx,fy,360,0.0,TWOPI,0) # pgfunt is not implemented
|
275
|
+
t = indgen(361)/360*TWOPI
|
276
|
+
x = sin(t*5)
|
277
|
+
y = sin(t*4)
|
278
|
+
pgenv -1,1,-1,1
|
279
|
+
pgline x,y
|
280
|
+
pgsci(3)
|
281
|
+
pglab('x','y','PGPLOT Example 9: routine PGFUNT')
|
282
|
+
pgunsa
|
283
|
+
pgebuf
|
284
|
+
end
|
285
|
+
|
286
|
+
def bessel_j0 arg
|
287
|
+
|
288
|
+
r = NArray.sfloat(arg.size)
|
289
|
+
x = arg.abs
|
290
|
+
idx1,idx2 = (x<=3).where2
|
291
|
+
if idx1.size>0 then
|
292
|
+
xo3 = x[idx1]/3.0
|
293
|
+
t = xo3**2
|
294
|
+
r[idx1] = 1.0 +
|
295
|
+
t*(-2.2499997 +
|
296
|
+
t*( 1.2656208 +
|
297
|
+
t*(-0.3163866 +
|
298
|
+
t*( 0.0444479 +
|
299
|
+
t*(-0.0039444 +
|
300
|
+
t*( 0.0002100))))))
|
301
|
+
end
|
302
|
+
if idx2.size>0 then
|
303
|
+
xx = x[idx2]
|
304
|
+
t = 3.0/xx
|
305
|
+
f0 = 0.79788456 +
|
306
|
+
t*(-0.00000077 +
|
307
|
+
t*(-0.00552740 +
|
308
|
+
t*(-0.00009512 +
|
309
|
+
t*( 0.00137237 +
|
310
|
+
t*(-0.00072805 +
|
311
|
+
t*( 0.00014476))))))
|
312
|
+
theta0 = xx - 0.78539816 +
|
313
|
+
t*(-0.04166397 +
|
314
|
+
t*(-0.00003954 +
|
315
|
+
t*( 0.00262573 +
|
316
|
+
t*(-0.00054125 +
|
317
|
+
t*(-0.00029333 +
|
318
|
+
t*( 0.00013558))))))
|
319
|
+
r[idx2] = f0*cos(theta0)/sqrt(xx)
|
320
|
+
end
|
321
|
+
return r
|
322
|
+
end
|
323
|
+
|
324
|
+
def bessel_j1 arg
|
325
|
+
r = NArray.sfloat(arg.size)
|
326
|
+
x = arg.abs
|
327
|
+
idx1,idx2 = (x<=3).where2
|
328
|
+
if idx1.size>0 then
|
329
|
+
xo3 = x[idx1]/3.0
|
330
|
+
t = xo3**2
|
331
|
+
f = 0.5 + t*(-0.56249985 +
|
332
|
+
t*( 0.21093573 +
|
333
|
+
t*(-0.03954289 +
|
334
|
+
t*( 0.00443319 +
|
335
|
+
t*(-0.00031761 +
|
336
|
+
t*( 0.00001109))))))
|
337
|
+
r[idx1] = f * arg[idx1]
|
338
|
+
end
|
339
|
+
if idx2.size>0 then
|
340
|
+
xx = x[idx2]
|
341
|
+
t = 3.0/xx
|
342
|
+
f1 = 0.79788456 +
|
343
|
+
t*( 0.00000156 +
|
344
|
+
t*( 0.01659667 +
|
345
|
+
t*( 0.00017105 +
|
346
|
+
t*(-0.00249511 +
|
347
|
+
t*( 0.00113653 +
|
348
|
+
t*(-0.00020033))))))
|
349
|
+
theta1 = xx - 2.35619449 +
|
350
|
+
t*( 0.12499612 +
|
351
|
+
t*( 0.00005650 +
|
352
|
+
t*(-0.00637879 +
|
353
|
+
t*( 0.00074348 +
|
354
|
+
t*( 0.00079824 +
|
355
|
+
t*(-0.00029166))))))
|
356
|
+
r[idx2] = f1*cos(theta1)/sqrt(xx)
|
357
|
+
end
|
358
|
+
idx = (arg<0).where
|
359
|
+
#p idx
|
360
|
+
#p r[idx]
|
361
|
+
r[idx] = -r[idx] if idx.size>0
|
362
|
+
return r
|
363
|
+
end
|
364
|
+
|
365
|
+
def pgex10
|
366
|
+
pgbbuf
|
367
|
+
pgsave
|
368
|
+
pgsci(YELLOW)
|
369
|
+
# PGFUNX(PGBSJ0,500,0.0,10.0*PI,0)
|
370
|
+
x = indgen(500)/50*PI
|
371
|
+
y = bessel_j0(x)
|
372
|
+
pgenv 0,PI*10, y.min,y.max
|
373
|
+
pgline x,y
|
374
|
+
pgsci(RED)
|
375
|
+
pgsls(DASH)
|
376
|
+
# PGFUNX(PGBSJ1,500,0.0,10.0*PI,1)
|
377
|
+
pgline x, bessel_j1(x)
|
378
|
+
pgsci(GREEN)
|
379
|
+
pgsls(FULL)
|
380
|
+
pglab('\fix', '\fiy',
|
381
|
+
'\frPGPLOT Example 10: routine PGFUNX')
|
382
|
+
pgmtxt('T', -4.0, 0.5, 0.5,
|
383
|
+
'\frBessel Functions')
|
384
|
+
pgarro(8.0, 0.7, 1.0, bessel_j0(NArray[1.0])[0])
|
385
|
+
pgarro(12.0, 0.5, 9.0, bessel_j1(NArray[9.0])[0])
|
386
|
+
pgstbg(GREEN)
|
387
|
+
pgsci(0)
|
388
|
+
pgptxt(8.0, 0.7, 0.0, 0.0, ' \fiy = J\d0\u(x)')
|
389
|
+
pgptxt(12.0, 0.5, 0.0, 0.0, ' \fiy = J\d1\u(x)')
|
390
|
+
pgunsa
|
391
|
+
pgebuf
|
392
|
+
end
|
393
|
+
|
394
|
+
# ====== Demo start ======
|
395
|
+
|
396
|
+
raise "device not found" if pgopen<0
|
397
|
+
|
398
|
+
pgex0
|
399
|
+
pgex1
|
400
|
+
pgex2
|
401
|
+
pgex3
|
402
|
+
pgsubp 2,1
|
403
|
+
pgex4
|
404
|
+
pgex5
|
405
|
+
pgsubp 1,1
|
406
|
+
pgex6
|
407
|
+
pgex7
|
408
|
+
pgex8
|
409
|
+
pgex9
|
410
|
+
pgex10
|
411
|
+
|
412
|
+
pgclos
|
413
|
+
exit
|
414
|
+
|