simplot library
overview of available routines
Simplot is a plot package, especially designed for C programmers. It also contains a simplot program for use by those having no programming experience at all. A very simple program, let's call it simple.c, looks like this:#include <simplot.h> int main(void) { plinit(X,"",200,200,15,15,"",""); plloop(); exit(0); }This program simply displays an X window of 200 x 200 millimeters, which has the origin at 15 mm from the left side and 15 mm from the bottom. It makes use of the default plevent routine, which recognises only a few interactions: the key stroke q ends your program, and the left mouse button displays cross hairs and their (x,y) position. The window also shows one button `Quit', which you can click with obvious results. Assuming that you installed Simplot in the default location, /simplot, you can compile this program with:
cc -I/usr/openwin/include \ -I/simplot/include \ -c -o simple.o simple.c cc -L/simplot/lib \ -L/usr/openwin/lib \ -L/usr/X11R6/lib \ -lsimplot -lxview -lolgx -lX11 -lm \ -o simple simple.o \You can make your own plevent routine to have more functionality. Here is an example:
#include <simplot.h> void plevent(float x, float y, int key) { static float xx,yy; static int leftdown=FALSE; switch(key) { case 'q': plend(); exit(0); break; case MouseMiddleDown: plmess("%g %g",x,y); plhairs(x,y,TRUE,TRUE); break; case MouseLeftDown: leftdown=TRUE; plmess("%g %g",x,y); plu(xx=x,yy=y); break; case MouseDrag: plmess("%g %g",x,y); if (leftdown) { plu(xx,yy); pld(xx=x,yy=y); } else { plhairs(x,y,TRUE,TRUE); } break; case MouseLeftUp: case MouseMiddleUp: leftdown=FALSE; plhairs(x,y,FALSE,FALSE); plmess(""); break; } } int main(void) { plinit(X,"",200,200,15,15,"",""); plloop(); exit(0); }This program shows the same cross hairs as the previous example, but in this case on pressing the middle mouse button. The left button now lets you draw free-hand curves. Here is an overview of all Simplot's routines; click on the routine names for full detail:
a | plarc | xcenter,ycenter,radius,start_angle,arc ,line_style |
plot an arc using user units | ||
plarcm | xcenter,ycenter,radius,start_angle,arc ,line_style | |
plot an arc using user units | ||
plarcr | dxcenter,dycenter,arc ,line_style | |
plot an arc relative to the current position, in user units | ||
plarcrm | dxcenter,dycenter,arc ,line_style | |
plot an arc relative to the current position, in millimeter units | ||
plarrow | dx,dy,len_pointer,ang_small,ang_large ,both_ends ,open,filled,perpendicular ,*text | |
plot an annotated arrow | ||
plaxes | xleft,ybot,xright,ytop,xlen,ylen ,*xtext,*ytext,*text | |
plot x-- and y--axes, more or less automatically | ||
plaxfit | *x,*y ,n ,dpercent,xlen,ylen ,*xtext,*ytext,*text | |
plot axes, fitted to an (x,y) array | ||
b | plblock | x1,y1,z1,x2,y2,z2 |
plot a 3D-block in user units | ||
plblockm | x1,y1,z1,x2,y2,z2 | |
plot a 3D-block in millimeter units | ||
plbox | x1,y1,x2,y2,radius | |
plot a box with rounded corners in user units | ||
plboxm | x1,y1,x2,y2,radius | |
plot a box with rounded corners in millimeter units | ||
plbutton | *label ,(*func )() | |
create a button in an X-display | ||
c | plclip | x1,y1,x2,y2 |
set clipping rectangle in user units | ||
plclipm | x1,y1,x2,y2 | |
set clipping rectangle in millimeter units | ||
plcont | *xy,*x,*y ,nx,ny,nxa ,height ,*ident ,line_style ,*flag | |
plot contours in an (x,y) array | ||
plcolor | red,green,blue | |
set the current color | ||
d | pld | x,y |
draw a straight line to a position in user units | ||
pldm | x,y | |
draw a straight line to a position in millimeter units | ||
pldot | x,y | |
plot a dot with diameter equal to current linewidth in user units | ||
pldotm | x,y | |
plot a dot with diameter equal to current linewidth in millimeter units | ||
pldraw | (void) | |
the user's drawing routine; (re)draws everything | ||
e | plend | (void) |
end plotting session | ||
plevent | xpointer,yointer ,event_code | |
handle X-events | ||
plexit | *message | |
print a message to standard error and exit | ||
pleye | xeye,yeye,zeye,xfocus,yfocus,zfocus | |
define location and focus of the eye in a 3D plot in user units | ||
pleyem | xeye,yeye,zeye,xfocus,yfocus,zfocus | |
define location and focus of the eye in a 3D plot in millimeter units | ||
f | plfill | fill_red,fill_green,fill_blue,stroke_red,stroke_green,stroke_blue |
fill and/or stroke the current path | ||
plfcolor | fill_red,fill_green,fill_blue | |
set fill_color for filled objects | ||
plfont | (void) | |
toggle between primary and alternate font | ||
plformat | left_right,up_down ,*format... | |
plot text according to extended C-format string with justification | ||
plframe | distance ,radius | |
draw a (rounded) box around current plot | ||
plfunc | (*func)(xf),xmin,ymin,xmax,ymax ,line_style | |
plot a 2D function | ||
g | plget | name |
return the value of a global variable | ||
h | plhairs | x,y ,horizontal,vertical |
(re)display or clear horizontal and/or vertical hairs in an X-application | ||
plhiss | *x,*y ,n,type,baseline ,ybase ,line_style ,ang,dis ,icshad | |
plot shaded histogram | ||
plhist | *x,*y ,n,type,baseline ,ybase | |
plot histogram or stick plot | ||
i | plinit | drvr ,*file ,xsize,ysize ,*main_font,*alternate_font |
initialize the plot-system | ||
l | plloop | (void) |
start event loop | ||
m | plmess | *format... |
display a formatted message | ||
plmvorg | x,y | |
move the origin in user units | ||
plmvorgm | x,y | |
move the origin in millimeter units | ||
o | plot | x,y ,line_style |
move the pen to a new 2D position in user units | ||
plotm | x,y ,line_style | |
move the pen to a new 2D position in millimeter units | ||
plot3 | x,y,z ,line_style | |
move the pen to a new 3D position in user units | ||
plotm3 | x,y,z ,line_style | |
move the pen to a new 3D position in millimeter units | ||
plotr | x,y ,line_style | |
move the pen to a new relative 2D position in user units | ||
plotrm | x,y ,line_style | |
move the pen to a new relative 2D position in millimeter units | ||
plotr3 | x,y,z ,line_style | |
move the pen to a new relative 3D position in user units | ||
plotrm3 | x,y,z ,line_style | |
move the pen to a new relative 3D position in millimeter units | ||
p | plpage | (void) |
feed a new page / clear the screen | ||
plpgon | *x,*y ,n,filltype ,spacing,angle ,line_style,last | |
plot a (filled) polygon | ||
plpie | **label ,n,lablen ,radius,x,y ,*toptext ,topfac ,*bottext ,botfac | |
plot an annotated pie | ||
plpline | *x,*y ,n ,*marker ,dash | |
plot a 2D polyline | ||
plpline3 | *x,*y,*z ,n,isym | |
plot a 3D polyline | ||
plpolar | size,angle ,pen | |
plot e vector in polar coordinates in user units | ||
plpolarm | size,angle ,pen | |
plot e vector in polar coordinates in millimeter units | ||
plpolc | *p | |
retrieve the coefficients of the current polynomial | ||
plpolf | *x,*y ,n,kk | |
calculate a polynomial | ||
plpolv | x | |
evaluate the current polynomial in x | ||
plpoly | *x,*y ,n,kk ,xmin,xmax ,line_style | |
calculate and plot a polynomial | ||
r | plrect | x1,y1,x2,y2 |
plot a (filled) rectangle in user units | ||
plrectm | x1,y1,x2,y2 | |
plot a (filled) rectangle in millimeter units | ||
plrectr | dx,dy | |
plot a (filled) relative rectangle in user units | ||
plrectrm | dx,dy | |
plot a (filled) relative rectangle in millimeter units | ||
pldraw | (void) | |
user-defined routine redrawing the canvas in X-applications | ||
plreserv | xrg,yrg,yhigh | |
move origin for concatenation of sub-plots | ||
plrotate | dx,dy | |
rotate user coordinate system | ||
s | plsave | (void) |
save current graphics context | ||
plscale3 | xmin,ymin,zmin,xmax,ymax,zmax,xlen,ylen,zlen | |
define 3D scaling factors | ||
plset | name ,value | |
set global values | ||
plshade | *xvert,*yvert ,nvert ,dir,wmesh ,line_style | |
hatch polygon | ||
plsize | *s | |
return the length of a string plotted in the current font | ||
plsmooth | *a ,n,k | |
perform k-point smoothing on (x,y) array | ||
plsort | *x,*y ,n | |
sort (x,y) array | ||
plsymbol | isym | |
plot a symbol | ||
t | pltext0 | *text |
plot a string, returning to position | ||
pltext | *s | |
plot a string, leave pen at end | ||
pltrace | (*f)(x,y),xmin,ymin,xmax,ymax,resol,grid ,*ident ,line_style | |
track an (implicit) 2D function | ||
u | plu[m] | x,y |
move to position without plotting in user units | ||
plu[m] | x,y | |
move to position without plotting in user units | ||
plunclip | (void) | |
remove clipping | ||
plunsave | (void) | |
restore graphics context | ||
x | plxbar | v |
plot error bar in x-direction | ||
y | plybar | v |
plot error bar in x-direction |
A0 | A1 | A2 | A3 |
A4 | A5 | A6 | A7 |
ANGLE | ArrowDown | ArrowLeft | ArrowRight |
ArrowUp | CROSS | DASH | DASHUNIT |
DOWN | Delete | EVENT_ASCII | EVENT_BUTTON |
EVENT_DOWN | EVENT_FUNCTION | EVENT_UP | End |
Escape | F1 | F10 | F11 |
F12 | F2 | F3 | F4 |
F5 | F6 | F7 | F8 |
F9 | GXcopy | GXxor | HEIGHT |
Home | Insert | LEVENTS | MouseDrag |
MouseLeftDown | MouseLeftUp | MouseMiddleDown | MouseMiddleUp |
MouseRightDown | MouseRightUp | OPAQUETEXT | |
PDFL | PENDIA | PLOTMODE | PLOTTER |
preCISION | PS | PSL | |
PageDown | PageUp | RECTFILL | RECTSTROKE |
RESOLUTION | UP | X | XANGLE |
XCROSS | XGRID | XIN | XLOG |
XMARK | XPEN | XSIZE | XSKIP |
XSQUAR | XU2M | XU2P | YANGLE |
YCROSS | YGRID | YIN | YLOG |
YMARK | YPEN | YSIZE | YSKIP |
YSQUAR | YU2M | YU2P |