### 12.3 Functions and Variables for Plotting

Function: contour_plot (expr, x_range, y_range, options, …)

  It plots the contours (curves of equal value) of expr over the region x_range by y_range. Any additional arguments are treated the same as in `plot3d`.

  This function only works when the plot format is either `gnuplot` or `gnuplot_pipes`. The additional package `implicit_plot`, which works in any graphic format, can also be used to plot contours but a separate expression must be given for each contour.

  Examples:

      (%i1) contour_plot (x^2 + y^2, [x, -4, 4], [y, -4, 4])$

  You can add any options accepted by `plot3d`; for instance, the option `legend` with a value of false, to remove the legend. By default, Gnuplot chooses and displays 3 contours. To increase the number of contours, it is necessary to use a custom `gnuplot_preamble`, as in the next example:

      (%i1) contour_plot (u^3 + v^2, [u, -4, 4], [v, -4, 4],
                    [legend,false],
                    [gnuplot_preamble, "set cntrparam levels 12"])$

  ·

  Categories: Plotting

System variable: geomview_command

  This variable stores the name of the command used to run the geomview program when the plot format is `geomview`. Its default value is "geomview". If the geomview program is not found unless you give its complete path or if you want to try a different version of it, you may change the value of this variable. For instance,

      (%i1) geomview_command: "/usr/local/bin/my_geomview"$

  ·

  Categories: Plotting

Function: get_plot_option (keyword, index)

  Returns the current default value of the option named keyword, which is a list. The optional argument index must be a positive integer which can be used to extract only one element from the list (element 1 is the name of the option).

  See also `set_plot_option`, `remove_plot_option` and the section on Plotting Options.

System variable: gnuplot_command

  This variable stores the name of the command used to run the gnuplot program when the plot format is `gnuplot`. Its default value is "gnuplot". If the gnuplot program is not found unless you give its complete path or if you want to try a different version of it, you may change the value of this variable. For instance,

      (%i1) gnuplot_command: "/usr/local/bin/my_gnuplot"$

  ·

  Categories: Plotting

System variable: gnuplot_file_args

  When a graphic file is going to be created using `gnuplot`, this variable is used to specify the way the file name should be passed to gnuplot. Its default value is "~s", which means that the name of the file will be passed directly. The contents of this variable can be changed in order to add options for the gnuplot program, adding those options before the format directive "~s".

  ·

  Categories: Plotting

System variable: gnuplot_view_args

  This variable is used to parse the argument that will be passed to the gnuplot program when the plot format is `gnuplot`. Its default value is "-persist ~s", where "~s" will be replaced with the name of the file where the gnuplot commands have been written (usually "maxout_xxx.gnuplot"). The option `-persist` tells gnuplot to exit after the commands in the file have been executed, without closing the window that displays the plot.

  Those familiar with gnuplot, might want to change the value of this variable. For example, by changing it to:

      (%i1) gnuplot_view_args: "~s -"$

  gnuplot will not be closed after the commands in the file have been executed; thus, the window with the plot will remain, as well as the gnuplot interactive shell where other commands can be issued in order to modify the plot.

  In Windows versions of Gnuplot older than 4.6.3 the behavior of "~s -" and "-persist ~s" were the opposite; namely, "-persist ~s" made the plot window and the gnuplot interactive shell remain, while "~s -" closed the gnuplot shell keeping the plot window. Therefore, when older gnuplot versions are used in Windows, it might be necessary to adjust the value of `gnuplot_view_args`.

  ·

  Categories: Plotting

Function: implicit_plot
`implicit_plot` (expr, x_range, y_range)
`implicit_plot` ([expr_1, …, expr_n], x_range, y_range)

  Displays a plot of a function on the real plane, defined implicitly by the expression expr. The domain in the plane is defined by x_range and y_range. Several functions can be represented on the same plot, giving a list [expr_1, …, expr_n] of expressions that define them. This function uses the global format options set up with the `set_plot_option`. Additional options can also be given as extra arguments for the `implicit_plot` command.

  The method used by `implicit_plot` consists of tracking sign changes on the domain given and it can fail for complicated expressions.

  `load(implicit_plot)` loads this function.

  Example:

      (%i1) load(implicit_plot)$
      (%i2) implicit_plot (x^2 = y^3 - 3*y + 1, [x, -4, 4], [y, -4, 4])$

  ·

  Categories: Plotting ·Share packages ·Package implicit_plot

Function: julia (x, y, ...options...)

  Creates a graphic representation of the Julia set for the complex number (x + i y). The two mandatory parameters x and y must be real. This program is part of the additional package `dynamics`, but that package does not have to be loaded; the first time julia is used, it will be loaded automatically.

  Each pixel in the grid is given a color corresponding to the number of iterations it takes the sequence that starts at that point to move out of the convergence circle of radius 2 centered at the origin. The number of pixels in the grid is controlled by the `grid` plot option (default 30 by 30). The maximum number of iterations is set with the option `iterations`. The program uses its own default palette: magenta,violet, blue, cyan, green, yellow, orange, red, brown and black, but it can be changed by adding an explicit `palette` option in the command.

  The default domain used goes from -2 to 2 in both axes and can be changed with the `x` and `y` options. By default, the two axes are shown with the same scale, unless the option `yx_ratio` is used or the option `same_xy` is disabled. Other general plot options are also accepted.

  The following example shows a region of the Julia set for the number -0.55 + i0.6. The option `color_bar_tics` is used to prevent Gnuplot from adjusting the color box up to 40, in which case the points corresponding the maximum 36 iterations would not be black.

      (%i1) julia (-0.55, 0.6, [iterations, 36], [x, -0.3, 0.2],
            [y, 0.3, 0.9], [grid, 400, 400], [color_bar_tics, 0, 6, 36])$

  ·

  Categories: Package dynamics ·Plotting

Function: make_transform ([var1, var2, var3], fx, fy, fz)

  Returns a function suitable to be used in the option `transform_xy` of plot3d. The three variables var1, var2, var3 are three dummy variable names, which represent the 3 variables given by the plot3d command (first the two independent variables and then the function that depends on those two variables). The three functions fx, fy, fz must depend only on those 3 variables, and will give the corresponding x, y and z coordinates that should be plotted. There are two transformations defined by default: `polar_to_xy` and `spherical_to_xyz`. See the documentation for those two transformations.

  ·

  Categories: Plotting

Function: mandelbrot (options)

  Creates a graphic representation of the Mandelbrot set. This program is part of the additional package `dynamics`, but that package does not have to be loaded; the first time mandelbrot is used, the package will be loaded automatically.

  This program can be called without any arguments, in which case it will use a default value of 9 iterations per point, a grid with dimensions set by the `grid` plot option (default 30 by 30) and a region that extends from -2 to 2 in both axes. The options are all the same that plot2d accepts, plus an option `iterations` to change the number of iterations.

  Each pixel in the grid is given a color corresponding to the number of iterations it takes the sequence starting at zero to move out of the convergence circle of radius 2, centered at the origin. The maximum number of iterations is set by the option `iterations`. The program uses its own default palette: magenta,violet, blue, cyan, green, yellow, orange, red, brown and black, but it can be changed by adding an explicit `palette` option in the command. By default, the two axes are shown with the same scale, unless the option `yx_ratio` is used or the option `same_xy` is disabled.

  Example:

  [grid,400,400])$

      (%i1) mandelbrot ([iterations, 30], [x, -2, 1], [y, -1.2, 1.2],
                  [grid,400,400])$

  ·

  Categories: Package dynamics ·Plotting

System function: polar_to_xy

  It can be given as value for the `transform_xy` option of plot3d. Its effect will be to interpret the two independent variables in plot3d as the distance from the z axis and the azimuthal angle (polar coordinates), and transform them into x and y coordinates.

  ·

  Categories: Plotting

Function: plot2d
`plot2d` (plot, x_range, …, options, …)
`plot2d` ([plot_1, …, plot_n], …, options, …)
`plot2d` ([plot_1, …, plot_n], x_range, …, options, …)

  Where plot, plot_1, …, plot_n can be either expressions, function names or a list with the any of the forms: `[discrete, [x1, ..., xn], [y1, ..., yn]]`, `[discrete, [[x1, y1], ..., [xn, ..., yn]]]` or `[parametric, x_expr, y_expr, t_range]`.

  Displays a plot of one or more expressions as a function of one variable or parameter.

  `plot2d` displays one or several plots in two dimensions. When expressions or function names are used to define the plots, they should all depend on only one variable var and the use of x_range will be mandatory, to provide the name of the variable and its minimum and maximum values; the syntax for x_range is: `[variable, min, max]`.

  A plot can also be defined in the discrete or parametric forms. The discrete form is used to plot a set of points with given coordinates. A discrete plot is defined by a list starting with the keyword discrete, followed by one or two lists of values. If two lists are given, they must have the same length; the first list will be interpreted as the x coordinates of the points to be plotted and the second list as the y coordinates. If only one list is given after the discrete keyword, each element on the list could also be a list with two values that correspond to the x and y coordinates of a point, or it could be a sequence of numerical values which will be plotted at consecutive integer values (1,2,3,...) on the x axis.

  A parametric plot is defined by a list starting with the keyword parametric, followed by two expressions or function names and a range for the parameter. The range for the parameter must be a list with the name of the parameter followed by its minimum and maximum values: `[param, min, max]`. The plot will show the path traced out by the point with coordinates given by the two expressions or functions, as param increases from min to max.

  A range for the vertical axis is an optional argument with the form: `[y, min, max]` (the keyword y is always used for the vertical axis). If that option is used, the plot will show that exact vertical range, independently of the values reached by the plot. If the vertical range is not specified, it will be set up according to the minimum and maximum values of the second coordinate of the plot points.

  All other options should also be lists, starting with a keyword and followed by one or more values. See `plot_options`.

  If there are several plots to be plotted, a legend will be written to identity each of the expressions. The labels that should be used in that legend can be given with the option `legend`. If that option is not used, Maxima will create labels from the expressions or function names.

  Examples:

  Plot of a common function:

      (%i1) plot2d (sin(x), [x, -%pi, %pi])$

  If the function grows too fast, it might be necessary to limit the values in the vertical axis using the `y` option:

      (%i1) plot2d (sec(x), [x, -2, 2], [y, -20, 20])$

  When the plot box is disabled, no labels are created for the axes. In that case, instead of using `xlabel` and `ylabel` to set the names of the axes, it is better to use option `label`, which allows more flexibility. Option `yx_ratio` is used to change the default rectangular shape of the plot; in this example the plot will fill a square.

      (%i1) plot2d ( x^2 - 1, [x, -3, 3], [box, false], grid2d,
            [yx_ratio, 1], [axes, solid], [xtics, -2, 4, 2],
            [ytics, 2, 2, 6], [label, ["x", 2.9, -0.3],
            ["x^2-1", 0.1, 8]], [title, "A parabola"])$

  A plot with a logarithmic scale in the vertical axis:

      (%i1) plot2d (exp(3*s), [s, -2, 2], logy)$

  Plotting functions by name:

      (%i1) F(x) := x^2 $

      (%i2) :lisp (defun |$g| (x) (m* x x x))
      $g

      (%i2) H(x) := if x < 0 then x^4 - 1 else 1 - x^5 $
      (%i3) plot2d ([F, G, H], [u, -1, 1], [y, -1.5, 1.5])$

  A plot of the butterfly curve, defined parametrically:

      (%i1) r: (exp(cos(t))-2*cos(4*t)-sin(t/12)^5)$
      (%i2) plot2d([parametric, r*sin(t), r*cos(t), [t, -8*%pi, 8*%pi]])$

  Plot of a circle, using its parametric representation, together with the function -|x|. The circle will only look like a circle if the scale in the two axes is the same, which is done with the option `same_xy`.

      (%i1) plot2d([[parametric, cos(t), sin(t), [t,0,2*%pi]], -abs(x)],
               [x, -sqrt(2), sqrt(2)], same_xy)$

  A plot of 200 random numbers between 0 and 9:

      (%i1) plot2d ([discrete, makelist ( random(10), 200)])$

  A plot of a discrete set of points, defining x and y coordinates separately:

      (%i1) plot2d ([discrete, makelist(i*%pi, i, 1, 5),
                                  [0.6, 0.9, 0.2, 1.3, 1]])$

  In the next example a table with three columns is saved in a file “data.txt” which is then read and the second and third column are plotted on the two axes:

      (%i1) display2d:false$

      (%i2) with_stdout ("data.txt", for x:0 thru 10 do
                                   print (x, x^2, x^3))$

      (%i3) data: read_matrix ("data.txt")$

      (%i4) plot2d ([discrete, transpose(data)[2], transpose(data)[3]],
        [style,points], [point_type,diamond], [color,red])$

  A plot of discrete data points together with a continuous function:

      (%i1) xy: [[10, .6], [20, .9], [30, 1.1], [40, 1.3], [50, 1.4]]$

      (%i2) plot2d([[discrete, xy], 2*%pi*sqrt(l/980)], [l,0,50],
              [style, points, lines], [color, red, blue],
              [point_type, asterisk],
              [legend, "experiment", "theory"],
              [xlabel, "pendulum's length (cm)"],
              [ylabel, "period (s)"])$

  See also the section about Plotting Options.

  ·

  Categories: Plotting

Function: plot3d
`plot3d` (expr, x_range, y_range, …, options, …)
`plot3d` ([expr_1, …, expr_n], x_range, y_range, …, options, …)

  Displays a plot of one or more surfaces defined as functions of two variables or in parametric form.

  The functions to be plotted may be specified as expressions or function names. The mouse can be used to rotate the plot looking at the surface from different sides.

  Examples:

  Plot of a function of two variables:

      (%i1) plot3d (u^2 - v^2, [u, -2, 2], [v, -3, 3], [grid, 100, 100],
              [mesh_lines_color,false])$

  Use of the `z` option to limit a function that goes to infinity (in this case the function is minus infinity on the x and y axes); this also shows how to plot with only lines and no shading:

      (%i1) plot3d ( log ( x^2*y^2 ), [x, -2, 2], [y, -2, 2], [z, -8, 4],
               [palette, false], [color, magenta])$

  The infinite values of z can also be avoided by choosing a grid that does not fall on any points where the function is undefined, as in the next example, which also shows how to change the palette and how to include a color bar that relates colors to values of the z variable:

      (%i1) plot3d (log (x^2*y^2), [x, -2, 2], [y, -2, 2],[grid, 29, 29],
             [palette, [gradient, red, orange, yellow, green]],
             color_bar, [xtics, 1], [ytics, 1], [ztics, 4],
             [color_bar_tics, 4])$

  Two surfaces in the same plot. Ranges specific to one of the surfaces can be given by placing each expression and its ranges in a separate list; global ranges for the complete plot are also given after the function definitions.

      (%i1) plot3d ([[-3*x - y, [x, -2, 2], [y, -2, 2]],
         4*sin(3*(x^2 + y^2))/(x^2 + y^2), [x, -3, 3], [y, -3, 3]],
         [x, -4, 4], [y, -4, 4])$

  Plot of a Klein bottle, defined parametrically:

      (%i1) expr_1: 5*cos(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)-10$
      (%i2) expr_2: -5*sin(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)$
      (%i3) expr_3: 5*(-sin(x/2)*cos(y)+cos(x/2)*sin(2*y))$

      (%i4) plot3d ([expr_1, expr_2, expr_3], [x, -%pi, %pi],
              [y, -%pi, %pi], [grid, 50, 50])$

  Plot of a “spherical harmonic” function, using the predefined transformation, `spherical_to_xyz` to transform from spherical coordinates to rectangular coordinates. See the documentation for `spherical_to_xyz`.

      (%i1) plot3d (sin(2*theta)*cos(phi), [theta, 0, %pi],
              [phi, 0, 2*%pi],
              [transform_xy, spherical_to_xyz], [grid,30,60],
         [legend,false])$

  Use of the pre-defined function `polar_to_xy` to transform from cylindrical to rectangular coordinates. See the documentation for `polar_to_xy`.

      (%i1) plot3d (r^.33*cos(th/3), [r,0,1], [th,0,6*%pi], [box, false],
         [grid, 12, 80], [transform_xy, polar_to_xy], [legend, false])$

  Plot of a sphere using the transformation from spherical to rectangular coordinates. Option `same_xyz` is used to get the three axes scaled in the same proportion. When transformations are used, it is not convenient to eliminate the mesh lines, because Gnuplot will not show the surface correctly.

      (%i1) plot3d ( 5, [theta, 0, %pi], [phi, 0, 2*%pi], same_xyz,
        [transform_xy, spherical_to_xyz], [mesh_lines_color,blue],
        [palette,[gradient,"#1b1b4e", "#8c8cf8"]], [legend, false])$

  Definition of a function of two-variables using a matrix. Notice the single quote in the definition of the function, to prevent `plot3d` from failing when it realizes that the matrix will require integer indices.

      (%i1) M: matrix([1,2,3,4], [1,2,3,2], [1,2,3,4], [1,2,3,3])$
      (%i2) f(x, y) := float('M [round(x), round(y)])$

      (%i3) plot3d (f(x,y), [x,1,4],[y,1,4],[grid,3,3],[legend,false])$

  By setting the elevation equal to zero, a surface can be seen as a map in which each color represents a different level.

      (%i1) plot3d (cos (-x^2 + y^3/4), [x,-4,4], [y,-4,4], [zlabel,""],
             [mesh_lines_color,false], [elevation,0], [azimuth,0],
             color_bar, [grid,80,80], [ztics,false], [color_bar_tics,1])$

  See also the section about Plotting Options.

  ·

  Categories: Plotting

System variable: plot_options

  This option is being kept for compatibility with older versions, but its use is deprecated. To set global plotting options, see their current values or remove options, use `set_plot_option`, `get_plot_option` and `remove_plot_option`.

  ·

  Categories: Plotting

Function: remove_plot_option (name)

  Removes the default value of an option. The name of the option must be given.

  See also `set_plot_option`, `get_plot_option` and the section on Plotting Options.

  ·

  Categories: Plotting

Function: set_plot_option (option)

  Accepts any of the options listed in the section Plotting Options, and saves them for use in plotting commands. The values of the options set in each plotting command will have precedence, but if those options are not given, the default values set with this function will be used.

  `set_plot_option` evaluates its argument and returns the complete list of options (after modifying the option given). If called without any arguments, it will simply show the list of current default options.

  See also `remove_plot_option`, `get_plot_option` and the section on Plotting Options.

  Example:

  Modification of the `grid` values.

      (%i1) set_plot_option ([grid, 30, 40]);
      (%o1) [[plot_format, gnuplot_pipes], [grid, 30, 40],
      [run_viewer, true], [axes, true], [nticks, 29], [adapt_depth, 5],
      [color, blue, red, green, magenta, black, cyan],
      [point_type, bullet, box, triangle, plus, times, asterisk],
      [palette, [gradient, green, cyan, blue, violet],
      [gradient, magenta, violet, blue, cyan, green, yellow, orange,
      red, brown, black]], [gnuplot_preamble, ], [gnuplot_term, default]]

  ·

  Categories: Plotting

System function: spherical_to_xyz

  It can be given as value for the `transform_xy` option of `plot3d`. Its effect will be to interpret the two independent variables and the function in `plot3d` as the spherical coordinates of a point (first, the angle with the z axis, then the angle of the xy projection with the x axis and finally the distance from the origin) and transform them into x, y and z coordinates.

  ·

  Categories: Plotting