Contact: zegraph  @  yahoo.com      Last update: January 2020

ZeGraph Examples

Example-1

load("zegraph.dll");

zg=zegraph(500,500,3);

// draw text

tx=zg.add("text");
tx.font(24);
tx.color(0,0,1);
[w,h]=tx.string("ABC<sym>alpha</sym><sup>123</sup>",0,0);
tx.rotatez(45);

zg.show();

tx.disable();

// draw a line in the default coordinate system

line=zg.add("line");
line.solid(3);
v=line.vertex();
v.add(0,0,0, 200,100,0);
zg.show();

// make the line look nicer

line.smooth(true);
zg.show();

// let's change the default colors

zg.color(1,1,1);
zg.bgcolor(0,0,0);
zg.show();

// the line uses its own color if it is set

line.color(1,1,0);
zg.show();

// the line uses per-vertex colors if they are set
color=line.color();
color.add(1,0,0,1, 0,1,0,1);
zg.show();

// a disabled object will not show

line.disable();
zg.show();
line.enable();
zg.show();

// save the image

zg.tofile("test.png");

Example-2

load("zegraph.dll");

zg=zegraph(900,900);

// add a plot

plot=zg.add("plot");

plot.scale(0.7,0.7,1);

// get and set the x-axis

xaxis=plot.xaxis(); 
xaxis.linewidth(3);
xaxis.range(0,10);
xaxis.title("X");
xaxis.tickmarks(0,10,2,2);
xaxis.ticksize(2);
xaxis.tickdigits(0);

// get and set the y-axis

yaxis=plot.yaxis(); 
yaxis.range(0,1);
yaxis.title("Y");
yaxis.tickmarks(0,1,0.2,0);
yaxis.tickdigits(1);

zg.show();

// By default, axises are in the center.
// We can anchor them in different places
// and give them different colors and font.

xaxis.color(0,0,1);
xaxis.font(15);
plot.xaxis(0,-1,0);     // move x-axis to ymin
plot.yaxis(-1,0,0);     // move y-axis to xmin

zg.show();

// Adding x- or y- axis as the second axis is easy.

axis=plot.add("axis");
axis.type("x",false);
axis.range(0,12);
axis.title("Month");
axis.tickmarks(0,12,1,0);
// get ymax in SCS
[x,y,z]=plot.global(0,1,0);
// move the axis to ymax
axis.translate(0,y,0);
// use custom tick lebals
axis.ticklabels("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",true);

zg.show();

// Now we remove objects added to the plot

plot.clear();

// A plot is in 3D, but its z-axis is disabled.
// To see the z-axis, active it and rotate the plot.

plot.xaxis(0,-1,-1);
plot.yaxis(-1,0,-1);

zaxis=plot.zaxis(-1,1,0);
zaxis.title("Z");
zaxis.range(-1,1);
zaxis.tickmarks(-0.5,1,0.5,0);

plot.scale(.5,.5,.5);
plot.rotatez(30);
plot.rotatex(-60);

// Use the plot to call the show function so that 
// you can use the mouse or arrow keys to rotate the plot. 

zg.show(plot);

Example-3

load("zegraph.dll");

zg=zegraph(800,800);

// add a globe

globe=zg.add("globe");

// make globe surface

poly=globe.surface(300);
poly.color(0,0,1);

// add coastlines and grid lines.

line=globe.gshhs("data/gshhs_c.b");
line.color(1,1,1);

line=globe.grid(15);
line.color(.7,.7,.7);

// now let's set the focus to look at Japan

globe.focus(139,36);
globe.light(139,36);

zg.show(globe);

// and draw a line and anchor an object

line=globe.line(139,36,180,0);
line.color(1,1,0);

poly=globe.add("polygon",139,36,0);
poly.color(1,0,0);
poly.sphere(5);

zg.show(globe);

// you can use an image as the texture of the globe surface and 
// set the light position according to time

globe.texture(300,"data/earth.png",true);

globe.sun(1,0,0,0);

zg.show(globe);

Example-4

load("zegraph.dll");

zg=zegraph(800,800);

// add a light to the graph

light=zg.add("light");
light.position(1,1,1);

// add a node to the light to hold objects
// rotating the node affect all objects in it

node=light.add("node");
node.rotatex(-60);

// add shapes to the node
// note the coordinate system is SCS

node2=node.add("node");
poly=node2.add("polygon");
poly.color(0,1,1);
poly.cylinder(100,30);
node2.translate(-30,0,0);

node2=node.add("node");
poly=node2.add("polygon");
poly.color(1,1,0);
poly.cone(100,30);
node2.translate(30,0,0);

poly=node.add("polygon");
poly.color(0,1,0);
poly.torus(200,30);

zg.show(node);

// apply material of jade to the torus

mat=poly.material();
mat.ambient(0.14,0.22,0.16,0.9);
mat.diffuse(0.54,0.89,0.63,0.9);
mat.specular(0.32,0.32,0.32,0.9);
mat.shininess(12.8);

zg.show(node);

Example-5

load("zegraph.dll");

zg=zegraph(800,500);

// add a plot to the graph

plot=zg.add("plot");
plot.scale(.7,.7,1);

// add coast line to the plot

xmin=100;
xmax=240;
ymin=10;
ymax=70;

line=plot.add("line");
line.gshhs("data/gshhs_c.b",xmin,xmax,ymin,ymax);

vert=line.vertex();
[x1,x2,y1,y2]=vert.map(0.5*(xmin+xmax));

// set plot ranges

axis=plot.xaxis();
axis.range(x1,x2);
axis.showticks(false);
axis.showlabels(false);
axis=plot.yaxis();
axis.range(y1,y2);
axis.showticks(false);
axis.showlabels(false);


// add lines as the map border

line=plot.add("line");
line.type("strip");
v=line.vertex();
for (y=ymin; y<=ymax; y++) {
    v.add(xmin,y,0);
}
v.add(xmax,ymax,0);
v.map(0.5*(xmin+xmax));

line=plot.add("line");
line.type("strip");
v=line.vertex();
v.add(xmin,ymin,0);
for (y=ymin; y<=ymax; y++) {
    v.add(xmax,y,0);
}
v.map(0.5*(xmin+xmax));

// add country boders to the plot

line=plot.add("line");
line.color(0,0,1);
line.gshhs("data/wdb_borders_l.b",xmin,xmax,ymin,ymax);

v=line.vertex();
[x1,x2,y1,y2]=v.map(0.5*(xmin+xmax));

zg.show(plot);

Example-6

load("zegraph.dll");

width=900;
height=600;
zg=zegraph(width,height);

// add a plot to the graph

scale=0.7;
plot=zg.add("plot");
plot.scale(scale,scale,1);

// set plot ranges

xmin=-180;
xmax=180;
step=30;
ymin=-90;
ymax=90;

axis=plot.xaxis(0,-1,0);
axis.range(xmin,xmax);
axis.tickmarks(xmin,xmax,step,0);
axis.tickdigits(0);
axis.title("Longitude");

axis=plot.yaxis(-1,0,0);
axis.range(ymin,ymax);
axis.tickmarks(ymin,ymax,step,0);
axis.tickdigits(0);
axis.title("Latitude");

// add a line as frame

line=plot.add("line");
line.solid(2);
line.type("strip");
vert=line.vertex();
vert.add(xmin,ymax,0, xmax,ymax,0, xmax,ymin,0);

// now use a polygon for world map

poly=plot.add("polygon");
poly.type("quads");
vert=poly.vertex();
vert.add(xmin,ymin,0, xmax,ymin,0, xmax,ymax,0, xmin,ymax,0);
// move the polygon down slightly so that it won't mix with other objects
poly.translate(0,0,-0.1);

// use an image as texture

tx=poly.texture();
[s,t]=tx.image("data/earth.png");
ts=poly.texcoord();
ts.add(0,0, s,0, s,t, 0,t);

// add coastlines
line=plot.add("line");
line.gshhs("data/gshhs_c.b",xmin,xmax,ymin,ymax);
line.color(1,1,1);

zg.show();

Example-7

load("zegraph.dll", "matrix.dll", "netcdf.dll");

width=900;
height=600;
zg=zegraph(width,height);

// add a plot to the graph

scale=0.7;
plot=zg.add("plot");
plot.scale(scale,scale,1);

// set plot ranges

xmin=0;
xmax=360;
step=30;
ymin=-90;
ymax=90;

axis=plot.xaxis(0,-1,0);
axis.range(xmin,xmax);
axis.tickmarks(xmin,xmax,step,0);
axis.tickdigits(0);
axis.title("Longitude");

axis=plot.yaxis(-1,0,0);
axis.range(ymin,ymax);
axis.tickmarks(ymin,ymax,step,0);
axis.tickdigits(0);
axis.title("Latitude");

// read surface temperature data; refer to netcdf and matrix libraries.

cdf=netcdf("data/2000010100.cdf");
cdf.variable("T995");
[nr,nc]=cdf.dims();
S=short(nr,nc);
S.import(cdf[*]);
D=double(S);
D*=cdf.scale_factor;
D+=cdf.add_offset;
// flip rows so that data are for lat from -90 to 90
D.flip("r");
// attached data at lon=0 to the end for lon=360
D=D|D[*,0];
nc++;
// data range
dmin=D.min();
dmax=D.max();
d=0.1*(dmax-dmin);
dmin+=d;
dmax-=d;
[dptr,n]=D.ptr();
// x-y data
X=double(nc);
X.fill(0,2.5);
[xptr,n]=X.ptr();
Y=double(nr);
Y.fill(-90,2.5);
[yptr,n]=Y.ptr();

// make colorbar

cbar=zg.add("colorbar");
cbar.add(0,0,1,dmin, 0,1,0,0.5*(dmin+dmax), 1,0,0,dmax);
cbar.interpolate(2);
cbar.labeldigits(1);
cbar.linewidth(2);
cbar.size(scale*width,15);
cbar.translate(0,scale*height/2+50,0);
cbar.discrete(true);

// now use a polygon for contour map

poly=plot.add("polygon");
poly.type("quads");
v=poly.vertex();
v.add(xmin,ymin,0, xmax,ymin,0, xmax,ymax,0, xmin,ymax,0);
poly.translate(0,0,-0.1);
tx=poly.texture();
[s,t]=tx.data(dptr,nr,nc,cbar);
ts=poly.texcoord();
ts.add(0,0, s,0, s,t, 0,t);

line=plot.add("line");
line.gshhs("data/gshhs_c.b",xmin,xmax,ymin,ymax);
line.color(1,1,1);

zg.show();

Example-8

load("zegraph.dll", "matrix.dll", "netcdf.dll");

width=900;
height=600;
zg=zegraph(width,height);

// add a plot to the graph

scale=0.7;
plot=zg.add("plot");
plot.scale(scale,scale,1);

// set plot ranges

xmin=0;
xmax=360;
step=30;
ymin=-90;
ymax=90;

axis=plot.xaxis(0,-1,0);
axis.range(xmin,xmax);
axis.tickmarks(xmin,xmax,step,0);
axis.tickdigits(0);
axis.title("Longitude");

axis=plot.yaxis(-1,0,0);
axis.range(ymin,ymax);
axis.tickmarks(ymin,ymax,step,0);
axis.tickdigits(0);
axis.title("Latitude");

// read surface temperature data; refer to netcdf and matrix libraries.

cdf=netcdf("data/2000010100.cdf");
cdf.variable("T995");
[nr,nc]=cdf.dims();
S=short(nr,nc);
S.import(cdf[*]);
D=double(S);
D*=cdf.scale_factor;
D+=cdf.add_offset;
// flip rows so that data are for lat from -90 to 90
D.flip("r");
// attached data at lon=0 to the end for lon=360
D=D|D[*,0];
nc++;
// data range
dmin=D.min();
dmax=D.max();
d=0.1*(dmax-dmin);
dmin+=d;
dmax-=d;
[dptr,n]=D.ptr();
// x-y data
X=double(nc);
X.fill(0,2.5);
[xptr,n]=X.ptr();
Y=double(nr);
Y.fill(-90,2.5);
[yptr,n]=Y.ptr();

// make colorbar

cbar=zg.add("colorbar");
cbar.add(0,0,1,dmin, 0,1,0,0.5*(dmin+dmax), 1,0,0,dmax);
cbar.interpolate(2);
cbar.labeldigits(1);
cbar.linewidth(2);
cbar.size(scale*width,15);
cbar.translate(0,scale*height/2+50,0);

// coastlines

line=plot.add("line");
line.gshhs("data/gshhs_c.b",xmin,xmax,ymin,ymax);
line.color(.5,.5,.5);

// contour

d=(dmax-dmin)/10.0;
for (iso=dmin; iso<=dmax; iso+=d) {
    line=plot.add("line");
    v=line.contour(dptr,xptr,nc,yptr,nr,iso);
    v.flatten(1,1,0);
    c=cbar.get(iso);
    line.color(c[0],c[1],c[2]);
}

zg.show();

Example-9

load("zegraph.dll", "matrix.dll", "netcdf.dll");

width=900;
height=600;
zg=zegraph(width,height);

// add a plot to the graph

scale=0.7;
plot=zg.add("plot");
plot.scale(scale,scale,1);

// set plot ranges

xmin=0;
xmax=360;
step=30;
ymin=-90;
ymax=90;

axis=plot.xaxis(0,-1,0);
axis.range(xmin,xmax);
axis.tickmarks(xmin,xmax,step,0);
axis.tickdigits(0);
axis.title("Longitude");

axis=plot.yaxis(-1,0,0);
axis.range(ymin,ymax);
axis.tickmarks(ymin,ymax,step,0);
axis.tickdigits(0);
axis.title("Latitude");

// read surface temperature data; refer to netcdf and matrix libraries.

cdf=netcdf("data/2000010100.cdf");
// u-wind
cdf.variable("U995");
[nr,nc]=cdf.dims();
S=short(nr,nc);
S.import(cdf[*]);
U=double(S);
U*=cdf.scale_factor;
U+=cdf.add_offset;
// v-wind
cdf.variable("V995");
S.import(cdf[*]);
V=double(S);
V*=cdf.scale_factor;
V+=cdf.add_offset;

D=sqrt(U*U+V*V);

// data range
dmin=D.min();
dmax=D.max();
d=0.1*(dmax-dmin);
dmin+=d;
dmax-=d;

// make colorbar

cbar=zg.add("colorbar");
cbar.add(0,0,1,dmin, 0,1,0,0.5*(dmin+dmax), 1,0,0,dmax);
cbar.interpolate(2);
cbar.labeldigits(1);
cbar.linewidth(2);
cbar.size(scale*width,15);
cbar.translate(0,scale*height/2+50,0);

for (i=0; i<nr; i++) {
    y=90-i*2.5;
    for (j=0; j<nc; j++) {
        x=1.25+j*2.5;
        line=plot.add("line",x,y,0);
        [r,g,b]=cbar.get(D[i,j]);
        line.color(r,g,b);
        line.vector(U[i,j],V[i,j],3);
    }
}

zg.show();

Example-10

load("zegraph.dll", "matrix.dll", "netcdf.dll");

width=900;
height=600;
zg=zegraph(width,height);

// add a plot to the graph

scale=0.7;
plot=zg.add("plot");
plot.scale(scale,scale,1);

// set plot ranges

xmin=0;
xmax=100;
ymin=-1;
ymax=1;

axis=plot.xaxis();
axis.range(xmin,xmax);
axis.tickmarks(xmin,xmax,20,0);
axis.tickdigits(0);
axis.title("X");

axis=plot.yaxis(-1,0,0);
axis.range(ymin,ymax);
axis.tickmarks(ymin,ymax,0.5,0);
axis.tickdigits(1);
axis.title("Y");

X=double(100,1);
X.fill(0.5,1);
Y=cos(0.01*2*pi()*X);
D=X|Y|0;
[ptr,n]=D.ptr();

line=plot.add("line");
line.color(0,0,1);
line.dash(1.5);
line.smooth(true);
vert=line.vertex();
vert.add(ptr,n);

D=D[0:*:10,*];
[ptr,n]=D.ptr();
point=plot.add("point");
point.color(1,0,0);
point.size(10);
point.smooth(true);
vert=point.vertex();
vert.add(ptr,n);

zg.show();

Example-11

load("zegraph.dll", "matrix.dll", "netcdf.dll");

width=500;
height=300;
zg=zegraph(width,height);

// add a plot to the graph

scale=0.7;
plot=zg.add("plot");
plot.scale(scale,scale,1);

// set plot ranges

xmin=0;
xmax=100;
ymin=-1;
ymax=1;

axis=plot.xaxis();
axis.range(xmin,xmax);
axis.tickmarks(xmin,xmax,20,0);
axis.tickdigits(0);
axis.title("X");

axis=plot.yaxis(-1,0,0);
axis.range(ymin,ymax);
axis.tickmarks(ymin,ymax,0.5,0);
axis.tickdigits(1);
axis.title("Y");

X=double(100,1);
X.fill(0.5,1);
Y=cos(0.01*2*pi()*X);

zg.togifa("test.gif",50);

line=plot.add("line");
line.color(0,0,1);
line.smooth(true);
vert=line.vertex();

for (i=0; i<100; i++) {
    vert.add(X[i],Y[i],0);
    zg.togifa("add");
    csv(i);
}

zg.togifa("end");