Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2071 | zjchen | 1 | !goto $wims_read_parm |
2 | |||
3 | :def |
||
4 | title=Histogram |
||
5 | synonyme=plot frequency, frequency plot |
||
6 | input=data1d |
||
7 | !exit |
||
8 | |||
9 | :proc |
||
10 | |||
11 | cnt=!itemcnt $formula |
||
12 | range=!trim $range |
||
13 | !default range=$range1 |
||
14 | range=!trim $range |
||
15 | !default range=1 |
||
16 | range=$[$range] |
||
17 | data1=!item 1 of $formula |
||
18 | data1=$[$data1] |
||
19 | !if NaN isin $range or Inf isin $range or \ |
||
20 | NaN isin $data1 or Inf isin $data1 or \ |
||
21 | $range*10000<abs($data1) |
||
22 | error=bad_formula |
||
23 | !exit |
||
24 | !endif |
||
25 | |||
26 | list=!values (floor(x/$range)+0.5)*($range) for x in $formula |
||
27 | !if NaN isin $list or Inf isin $list |
||
28 | error=bad_formula |
||
29 | !exit |
||
30 | !endif |
||
31 | list=!sort numeric item $list |
||
32 | |||
33 | x1=!item 1 of $list |
||
34 | x2=!item -1 of $list |
||
35 | y1=0 |
||
36 | y2=1 |
||
37 | |||
38 | old=$x1 |
||
39 | ocnt=1 |
||
40 | !reset pdata |
||
41 | !for i=2 to $cnt |
||
42 | curr=!item $i of $list |
||
43 | !if $curr=$old |
||
44 | !advance ocnt |
||
45 | !else |
||
46 | pdata=!append line $old $ocnt to $pdata |
||
47 | y2=$[max($y2,$ocnt)] |
||
48 | old=$curr |
||
49 | ocnt=1 |
||
50 | !endif |
||
51 | !next i |
||
52 | pdata=!append line $old $ocnt to $pdata |
||
53 | insplot_data=$pdata |
||
54 | |||
55 | y2=$[ceil($y2*1.2)] |
||
56 | xdiff=$[max($range,0.1*($x2-($x1)))] |
||
57 | x1=$[$x1-$xdiff] |
||
58 | x2=$[$x2+$xdiff] |
||
59 | |||
60 | insplot_set=size $[$picx/500], $[$picy/400]; boxwidth $range |
||
61 | !insplot [$x1:$x2] [$y1:$y2] 'insplot_data' notitle with boxes |
||
62 | result=$ins_out |
||
63 | !if getins notin $result |
||
64 | result= |
||
65 | !endif |
||
66 | |||
67 | !exit |
||
68 | |||
69 | :output |
||
70 | |||
71 | <center> |
||
72 | $result |
||
73 | </center> <p> |
||
74 | Interval = $range. Data: $cnt numbers { $formula } |
||
75 | <p> |
||
76 | !exit |
||
77 |