The plot package is described here. Additional demos are available from the J system main menu under Studio... |Demos... |plot. To use the package, first enter:

`   load 'plot'`

Cantor Ternary Function

ctf i produces the i-th number whose base-3 representation consists only of 0 and 1. The plot of the first 5000 such numbers illustrates the characteristic staircase-shape of the Cantor function.

```   ctf=: 3 #. #:
plot ctf i.5000```

Prime Number Race

Are there more primes equal to 3 mod 4 than primes equal to 1 mod 4?

It turns out that in the early going, the "3's mod 4" dominate, though the "1's mod 4" catch up, and the lead changes infinitely often.

The graph shows the part of the race between the 808000 and 812000-th primes, where the lead changes a few times. These primes are in the range given by:

```   p: 808000 812000
12325063 12390403```

```   primerace=: [: +/\ _2 + 4 | p:
plot 808000 }.each (;primerace) i.812000```

3D Function Plot

The graph shows the real part of the gamma function (here derived from the factorial function) near the origin of the complex plane.

To avoid infinities, for example at gamma (_3,0), the calculated values are confined to the interval [_3,12].

```   gamma=: !@<:
real=: {.@+.
x=: steps _3.5 4.5 40
y=: steps _1 1 40
z=: real gamma x j./ y
dat=: _3 >. 12 <. z
'surface;noaxes;viewpoint _1 _2.5 1' plot dat```

Combining different plot types

 Fig. 1: MS Works plot

The following data, (taken from Elementary Statistics. Second edition by P. G. Hoel) was used by Keith Smillie to demonstrate simple linear regression in J in his two page Introduction to J brochure.

The brochure shows a plot (Fig. 1) of observed yields (y) at different levels of watering (x) and their regression line created in MS Works. In this example we will attempt to recreate the plot using J.

```   x=: 12 18 24 30 36 42 48       NB. levels of watering
y=: 5.3 5.7 6.3 7.2 8 8.7 8.4  NB. yields
]b=: y %. X=. 1,"0 x           NB. regression coefficients
plot x; b p. x                 NB. plot regression line
NB. plot 12 48; 'b p. y'       NB. alternative plot format```
 Fig. 2:  plot x; b p. x
 Fig. 3:  options plot x; b p. x

Now lets add some of the missing text to the plot.

```   xlbl=: 'Water (in.)'
ylbl=: 'Yield (bu.)'
tittxt=: 'Yield vs Water'
options=: 'title ',tittxt,';xcaption ',xlbl,';ycaption ',ylbl
options plot x; b p. x         NB. plot regression line with text labels```

Ok, we're getting there now, but we need to add the series of observed yields to get an idea of how well our regression fits the data.

```   keytxt=: 'Obs.,Est.'
options=: options,';key ',keytxt
options plot x; y ,: b p. x    NB. plot regression line and observed yields```
 Fig. 4:  options plot x; y ,: b p. x

The plot would be much clearer if, as in the original MS Works plot, the observed yields were plotted as points, but the regression as a line. However we can't use the plot verb to get different plot types for series on the same plot, instead we need to use the more powerful underlying verb pd.

Using pd we can build up the elements of the plot step by step giving us much more flexibility as to which options apply to which series.

It is possible to run the list of commands below in a J session one by one to create the plot, however wrapping the commands in a verb (in this case called plotyvw) that we define in a script file makes it much easier to experiment with changes. Just make the desired change, reload the script and run the verb.

 Fig. 5:  x plotyvw y

«combplottype.ijs»= Script showing how to combine series with different plot types
```require 'plot'
x=: 12 18 24 30 36 42 48       NB. levels of watering
y=: 5.3 5.7 6.3 7.2 8 8.7 8.4  NB. yields

plotyvw=: 4 : 0
b=. y %. X=. 1,"0 x
xlbl=. 'Water (in.)'
ylbl=. 'Yield (bu.)'
tittxt=. 'Yield vs Water'
keytxt=. 'Obs.,Est.'
pd 'reset'
pd 'title ',tittxt
pd 'xcaption ',xlbl
pd 'ycaption ',ylbl
pd 'key ',keytxt
pd 'keystyle marker'
pd 'keycolor blue'
pd 'keymarkers circle,line'
pd 'type marker'
pd 'markers circle'
pd x;y
pd 'type line'
pd x;b p. x
pd 'show'
)

Note 'Commands to create plot'
x plotyvw y
x plotyvw2 y
)
```

With the addition of a few more options we can get pretty close to emulating the original MS Works plot. Try changing the value of polyorder to investigate fitting higher order polynomials.

 Fig. 6:  x plotyvw2 y with polyorder=. 1 Fig. 7:  x plotyvw2 y with polyorder=. 3

«combplottype.ijs»= Script continued...
```plotyvw2=: 4 : 0
b=. y %. X=. |: x^"1 0 i. >:polyorder=. 1
xlbl=. 'Water (in.)'
ylbl=. 'Yield (bu.)'
tittxt=. 'Yield vs Water'
keytxt=. 'Obs.,Est.'
pd 'reset'
pd 'title ',tittxt
pd 'xcaption ',xlbl
pd 'ycaption ',ylbl
pd 'frame 0'      NB. no frame
pd 'axes 1 1'     NB. show x & y axes
pd 'key ',keytxt
pd 'keystyle mho' NB. marker,horizontal,open
pd 'keypos tco'   NB. top,center,out
pd 'keymarkers circle,line'
pd 'ticstyle out'
pd 'xticpos 12 16 20 24 28 32 36 40 44 48'
pd 'yticpos 5 6 7 8 9'
pd 'grids 0 0'    NB. no gridlines
pd 'itemcolor black'
pd 'type marker'
pd 'markersize 1.2'
pd 'markers circle'
pd x;y
pd 'type line'
pd 12 48; (":b),' p. y' NB. Use function plot syntax for smoother curves
pd 'show'
)
```

Studio/Plot (last edited 2008-12-08 10:45:44 by anonymous)