Pari/GP Reference Documentation | Contents - Global index - GP keyboard shortcuts |
Functions for PostScript or SVG output High-level plotting functions Low-level plotting functions parploth parplothexport plot plotarc plotbox plotclip plotcolor plotcopy plotcursor plotdraw plotexport ploth plothexport plothraw plothrawexport plothsizes plotinit plotkill plotlines plotlinetype plotmove plotpoints plotpointsize plotpointtype plotrbox plotrecth plotrecthraw plotrline plotrmove plotrpoint plotscale plotstring psdraw psploth psplothraw | |
Although plotting is not even a side purpose of PARI, a number of plotting functions are provided. There are three types of graphic functions.
| |
High-level plotting functions | |
(all the functions starting with
| |
Low-level plotting functions | |
(called rectplot functions,
sharing the prefix
A number of primitive graphic objects (called rect objects) can then
be drawn in these windows, using a default color attached to that window
(which can be changed using the
Finally, the actual physical drawing is done using
In addition to initializing the window, you may use a scaled window to
avoid unnecessary conversions. For this, use
Plotting functions are platform independent, but a number of graphical
drivers are available for screen output: X11-windows (including
Openwindows and Motif), Windows's Graphical Device Interface, and the
FLTK graphical libraries and one may even write the graphical objects to a
PostScript or SVG file and use an external viewer to open it. The physical
window opened by
| |
Functions for PostScript or SVG output | |
in the same way that
| |
parploth(X = a, b, expr, {flags = 0}, {n = 0}) | |
Parallel version of
Important note.
The parameter n specifies the number of reference point on the graph, where
a value of 0 means we use the hardwired default values; the binary digits of
flag have the same meaning
as in For instance:
\\ circle parploth(X=0,2*Pi,[sin(X),cos(X)], "Parametric") \\ two entwined sinusoidal curves parploth(X=0,2*Pi,[sin(X),cos(X)]) \\ circle cut by the line y = x parploth(X=0,2*Pi,[X,X,sin(X),cos(X)], "Parametric") \\ circle parploth(X=0,2*Pi,exp(I*X), "Complex") \\ circle cut by the line y = x parploth(X=0,2*Pi,[(1+I)*X,exp(I*X)], "Complex")
The library syntax is
| |
parplothexport(fmt, X = a, b, expr, {flags = 0}, {n = 0}) | |
Parallel version of
The format
? s = parplothexport("svg", x=1,10, x^2+3); ? write("graph.svg", s);
The above only works if
? n = fileopen("graph.svg", "w"); ? filewrite(n, s); ? fileclose(n); This is intentionally more complicated.
The library syntax is
| |
plot(X = a, b, expr, {Ymin}, {Ymax}) | |
Crude ASCII plot of the function represented by expression expr from a to b, with Y ranging from Ymin to Ymax. If Ymin (resp. Ymax) is not given, the minimum (resp. the maximum) of the computed values of the expression is used instead.
The library syntax is
| |
plotarc(w, x2, y2, {filled = 0}) | |
Let (x1,y1) be the current position of the virtual cursor. Draws in the rectwindow w the outline of the ellipse that fits inside the box such that the points (x1,y1) and (x2,y2) are opposite corners. The virtual cursor does not move. If filled = 1, fills the ellipse.
? plotinit(1);plotmove(1,0,0); ? plotarc(1,50,50); plotdraw([1,100,100]);
The library syntax is
| |
plotbox(w, x2, y2, {filled = 0}) | |
Let (x1,y1) be the current position of the virtual cursor. Draw in the rectwindow w the outline of the rectangle which is such that the points (x1,y1) and (x2,y2) are opposite corners. Only the part of the rectangle which is in w is drawn. The virtual cursor does not move. If filled = 1, fill the box.
The library syntax is
| |
plotclip(w) | |
`clips' the content of rectwindow w, i.e remove all parts of the
drawing that would not be visible on the screen. Together with
The library syntax is
| |
plotcolor(w, c) | |
Set default color to c in rectwindow w. Return [R,G,B] value attached to color. Possible values for c are
* a
* a
* a 0 = white, 1 = black, 2 = blue, 3 = violetred, 4 = red, 5 = green, 6 = grey, 7 = gainsborough
and the color index is a non-negative integer in [0,7].
But this can be changed (see
? plotinit(0,100,100); ? plotcolor(0, "turquoise") %2 = [64, 224, 208] ? plotbox(0, 50,50,1); ? plotmove(0, 50,50); ? plotcolor(0, 2) \\ blue %4 = [0, 0, 255] ? plotbox(0, 50,50,1); ? plotdraw(0);
The library syntax is
| |
plotcopy(sourcew, destw, dx, dy, {flag = 0}) | |
Copy the contents of rectwindow sourcew to rectwindow destw with offset (dx,dy). If flag's bit 1 is set, dx and dy express fractions of the size of the current output device, otherwise dx and dy are in pixels. dx and dy are relative positions of northwest corners if other bits of flag vanish, otherwise of: 2: southwest, 4: southeast, 6: northeast corners.
The library syntax is
| |
plotcursor(w) | |
Give as a 2-component vector the current (scaled) position of the virtual cursor corresponding to the rectwindow w.
The library syntax is
| |
plotdraw(w, {flag = 0}) | |
Physically draw the rectwindow w. More generally, w can be of the form [w1,x1,y1,w2,x2,y2,...] (number of components must be divisible by 3; the windows w1, w2, etc. are physically placed with their upper left corner at physical position (x1,y1), (x2,y2),...respectively, and are then drawn together. Overlapping regions will thus be drawn twice, and the windows are considered transparent. Then display the whole drawing in a window on your screen. If flag ! = 0, x1, y1 etc. express fractions of the size of the current output device
The library syntax is
| |
plotexport(fmt, list, {flag = 0}) | |
Draw list of rectwindows as in
? plotinit(0, 100, 100); ? plotbox(0, 50, 50); ? plotcolor(0, 2); ? plotbox(0, 30, 30); ? plotdraw(0); \\ watch result on screen ? s = plotexport("svg", 0); ? write("graph.svg", s); \\ dump result to file
The library syntax is
| |
ploth(X = a, b, expr, {flag = 0}, {n = 0}) | |
High precision plot of the function y = f(x) represented by the expression expr, x going from a to b. This opens a specific window (which is killed whenever you click on it), and returns a four-component vector giving the coordinates of the bounding box in the form [xmin,xmax,ymin,ymax].
Important note. n specifies the number of reference point on the graph, where a value of 0 means we use the hardwired default values (1000 for general plot, 1500 for parametric plot, and 8 for recursive plot). If no flag is given, expr is either a scalar expression f(X), in which case the plane curve y = f(X) will be drawn, or a vector [f1(X),...,fk(X)], and then all the curves y = fi(X) will be drawn in the same window. The binary digits of flag mean:
* 1 = For instance:
ploth(X=0,2*Pi,[sin(X),cos(X)], "Parametric") ploth(X=0,2*Pi,[sin(X),cos(X)]) ploth(X=0,2*Pi,[X,X,sin(X),cos(X)], "Parametric") draw successively a circle, two entwined sinusoidal curves and a circle cut by the line y = x.
* 2 =
\pb 32 ploth(X=-1,1, sin(1/X)) ploth(X=-1,1, sin(1/X), "Recursive") for instance. Note that this example is pathological as it is impossible to evaluate sin(1/X) close to 0. It is better to avoid the singularity as follows.
ploth(X=1e-10,1, sin(1/X), "Recursive") Beware that if you are extremely unlucky, or choose too few reference points, you may draw some nice polygon bearing little resemblance to the original curve. For instance you should never plot recursively an odd function in a symmetric interval around 0. Try
ploth(x = -20, 20, sin(x), "Recursive") to see why. Hence, it's usually a good idea to try and plot the same curve with slightly different parameters. The other values toggle various display options:
* 4 =
s = plothsizes(); plotinit(0, s[2]-1, s[2]-1); plotscale(0, -1,1, -1,1); plotrecth(0, t=0,2*Pi, [cos(t),sin(t)], "Parametric|no_Rescale") plotdraw([0, -1,1]); This way we get a proper circle instead of the distorted ellipse produced by
ploth(t=0,2*Pi, [cos(t),sin(t)], "Parametric")
* 8 =
* 16 =
* 32 =
* 64 =
* 128 =
* 256 =
* 512 =
* 1024 =
* 2048 =
* 4096 =
ploth(X=0,2*Pi,exp(I*X), "Complex") ploth(X=0,2*Pi,[(1+I)*X,exp(I*X)], "Complex") will draw respectively a circle and a circle cut by the line y = x.
* 8192 =
The library syntax is
| |
plothexport(fmt, X = a, b, expr, {flags = 0}, {n = 0}) | |
Plot of expression expr, X goes from a to b in high resolution, returning the resulting picture as a character string which can then be written to a file.
The format
? s = plothexport("svg", x=1,10, x^2+3); ? write("graph.svg", s);
The library syntax is
| |
plothraw(X, Y, {flag = 0}) | |
Given X and Y two vectors of equal length, plots (in
high precision) the points whose (x,y)-coordinates are given in
X and Y. Automatic positioning and scaling is done, but
with the same scaling factor on x and y. If flag is 1, join points,
other nonzero flags toggle display options and should be combinations of bits
2k, k ≥ 3 as in
The library syntax is
| |
plothrawexport(fmt, X, Y, {flag = 0}) | |
Given X and Y two vectors of equal length, plots (in high precision)
the points whose (x,y)-coordinates are given in X and Y, returning the
resulting picture as a character string which can then be written to a file.
The format
Automatic positioning and scaling is done, but with the same scaling factor
on x and y. If flag is 1, join points, other nonzero flags toggle display
options and should be combinations of bits 2k, k ≥ 3 as in
The library syntax is
| |
plothsizes({flag = 0}) | |
Return data corresponding to the output window
in the form of a 8-component vector: window width and height, sizes for ticks
in horizontal and vertical directions (this is intended for the If flag = 0, sizes of ticks and characters are in pixels, otherwise are fractions of the screen size
The library syntax is
| |
plotinit(w, {x}, {y}, {flag = 0}) | |
Initialize the rectwindow w, destroying any rect objects you may have already drawn in w. The virtual cursor is set to (0,0). The rectwindow size is set to width x and height y; omitting either x or y means we use the full size of the device in that direction. If flag = 0, x and y represent pixel units. Otherwise, x and y are understood as fractions of the size of the current output device (hence must be between 0 and 1) and internally converted to pixels.
The plotting device imposes an upper bound for x and y, for instance the
number of pixels for screen output. These bounds are available through the
s = plothsizes(); plotinit(0, s[1]-1, s[2]-1); plotscale(0, 0,1000, 0,1000);
The library syntax is
| |
plotkill(w) | |
Erase rectwindow w and free the corresponding memory. Note that if you
want to use the rectwindow w again, you have to use
The library syntax is
| |
plotlines(w, X, Y, {flag = 0}) | |
Draw on the rectwindow w the polygon such that the (x,y)-coordinates of the vertices are in the vectors of equal length X and Y. For simplicity, the whole polygon is drawn, not only the part of the polygon which is inside the rectwindow. If flag is nonzero, close the polygon. In any case, the virtual cursor does not move.
X and Y are allowed to be scalars (in this case, both have to).
There, a single segment will be drawn, between the virtual cursor current
position and the point (X,Y). And only the part thereof which
actually lies within the boundary of w. Then move the virtual cursor
to (X,Y), even if it is outside the window. If you want to draw a
line from (x1,y1) to (x2,y2) where (x1,y1) is not necessarily the
position of the virtual cursor, use
The library syntax is
| |
plotlinetype(w, type) | |
This function is obsolete and currently a no-op. Change the type of lines subsequently plotted in rectwindow w. type -2 corresponds to frames, -1 to axes, larger values may correspond to something else. w = -1 changes highlevel plotting.
The library syntax is
| |
plotmove(w, x, y) | |
Move the virtual cursor of the rectwindow w to position (x,y).
The library syntax is
| |
plotpoints(w, X, Y) | |
Draw on the rectwindow w the
points whose (x,y)-coordinates are in the vectors of equal length X and
Y and which are inside w. The virtual cursor does not move. This
is basically the same function as
As was the case with the If you draw few points in the rectwindow, they will be hard to see; in this case, you can use filled boxes instead. Compare:
? plotinit(0, 100,100); plotpoints(0, 50,50); ? plotdraw(0) ? plotinit(1, 100,100); plotmove(1,48,48); plotrbox(1, 4,4, 1); ? plotdraw(1)
The library syntax is
| |
plotpointsize(w, size) | |
This function is obsolete. It is currently a no-op. Changes the "size" of following points in rectwindow w. If w = -1, change it in all rectwindows.
The library syntax is
| |
plotpointtype(w, type) | |
This function is obsolete and currently a no-op. change the type of points subsequently plotted in rectwindow w. type = -1 corresponds to a dot, larger values may correspond to something else. w = -1 changes highlevel plotting.
The library syntax is
| |
plotrbox(w, dx, dy, {filled}) | |
Draw in the rectwindow w the outline of the rectangle which is such that the points (x1,y1) and (x1+dx,y1+dy) are opposite corners, where (x1,y1) is the current position of the cursor. Only the part of the rectangle which is in w is drawn. The virtual cursor does not move. If filled = 1, fill the box.
The library syntax is
| |
plotrecth(w, X = a, b, expr, {flag = 0}, {n = 0}) | |
Writes to rectwindow w the curve output of
| |
plotrecthraw(w, data, {flags = 0}) | |
Plot graph(s) for data in rectwindow w; flag has the same
meaning here as in The argument data is a vector of vectors, each corresponding to a list a coordinates. If parametric plot is set, there must be an even number of vectors, each successive pair corresponding to a curve. Otherwise, the first one contains the x coordinates, and the other ones contain the y-coordinates of curves to plot.
The library syntax is
| |
plotrline(w, dx, dy) | |
Draw in the rectwindow w the part of the segment (x1,y1)-(x1+dx,y1+dy) which is inside w, where (x1,y1) is the current position of the virtual cursor, and move the virtual cursor to (x1+dx,y1+dy) (even if it is outside the window).
The library syntax is
| |
plotrmove(w, dx, dy) | |
Move the virtual cursor of the rectwindow w to position (x1+dx,y1+dy), where (x1,y1) is the initial position of the cursor (i.e. to position (dx,dy) relative to the initial cursor).
The library syntax is
| |
plotrpoint(w, dx, dy) | |
Draw the point (x1+dx,y1+dy) on the rectwindow w (if it is inside w), where (x1,y1) is the current position of the cursor, and in any case move the virtual cursor to position (x1+dx,y1+dy). If you draw few points in the rectwindow, they will be hard to see; in this case, you can use filled boxes instead. Compare:
? plotinit(0, 100,100); plotrpoint(0, 50,50); plotrpoint(0, 10,10); ? plotdraw(0) ? thickpoint(w,x,y)= plotmove(w,x-2,y-2); plotrbox(w,4,4,1); ? plotinit(1, 100,100); thickpoint(1, 50,50); thickpoint(1, 60,60); ? plotdraw(1)
The library syntax is
| |
plotscale(w, x1, x2, y1, y2) | |
Scale the local coordinates of the rectwindow w so that x goes from
x1 to x2 and y goes from y1 to y2 (x2 < x1 and y2 < y1 being
allowed). Initially, after the initialization of the rectwindow w using
the function
The library syntax is
| |
plotstring(w, x, {flags = 0}) | |
Draw on the rectwindow w the String x (see Section se:strings), at the current position of the cursor. flag is used for justification: bits 1 and 2 regulate horizontal alignment: left if 0, right if 2, center if 1. Bits 4 and 8 regulate vertical alignment: bottom if 0, top if 8, v-center if 4. Can insert additional small gap between point and string: horizontal if bit 16 is set, vertical if bit 32 is set (see the tutorial for an example).
The library syntax is
| |
psdraw(list, {flag = 0}) | |
This function is obsolete, use plotexport and write the result to file.
The library syntax is
| |
psploth(X = a, b, expr, {flags = 0}, {n = 0}) | |
This function is obsolete, use plothexport and write the result to file.
The library syntax is
| |
psplothraw(listx, listy, {flag = 0}) | |
This function is obsolete, use plothrawexport and write the result to file.
The library syntax is
| |