Sage: 3D Data Plotting

6 min read


Sage Beginner’s Guide

Sage Beginner's Guide

Unlock the full potential of Sage for simplifying and automating mathematical computing

        Read more about this book      

(For more resources related to this topic, see here.)

Time for action – make an interactive 3D plot

Let’s make an interactive 3D plot.

var('x, y')
p3d = plot3d(y^2 + 1 - x^3 - x, (x, -pi, pi), (y, -pi, pi))

If you run this example in the notebook interface, a Java applet called Jmol will run in the cell below the code. If you run it from the interactive shell, Jmol will launch as a stand-alone application. Clicking and dragging on the figure with the left mouse button will rotate the plot in 3D space. Clicking and dragging with the centre button, or moving the scroll wheel, zooms in and out. Right-clicking brings up a menu that allows you to set various options for Jmol. Since Jmol is also used to visualize the 3D structures of molecules, some of the options are not relevant for plotting functions. Here is a screenshot of the function, plotted with Jmol:

Sage Beginner's Guide

What just happened?

We made a cool 3D plot that allowed us to explore a function of two variables. When running Jmol as an applet in a worksheet, you can click on the “Get Image” link below the plot to save an image of the plot in its current state. However, the image quality is not particularly high because it is saved in JPEG format. When Jmol is called from the command line, it runs as a stand-alone application, and more options are available. You can save files in JPEG, GIF, PPM, PNG, or PDF format. Note that the PDF format is a bitmap embedded in a PDF file, rather than a true vector representation of the surface. The syntax for using plot3d is very simple:

plot3d(f(x,y), (x, x_min, x_max), (y, y_min, y_max))

There are a few optional arguments to the show method that you can use to alter the appearance of the plot. Setting mesh=True plots a mesh on the surface, and setting dots=True plots a small sphere at each point. You can also use the transformation keyword argument to apply a transformation to the data—see the plot3d documentation for more information.

Higher quality output

We can improve the quality of saved images using ray tracing, which is an algorithm for generating images that is based on optical principles. Sage comes with ray tracing software called Tachyon, which can be used to view 3D plots. To activate Tachyon, use the show method with the viewer keyword as shown below:'tachyon', frame=False, axes=True)

Depending on the speed of your computer, the ray tracing may require a few seconds to a few minutes.

Sage Beginner's Guide

The frame keyword selects whether or not to draw a box around the outer limits of the plot, while the axes keyword determines whether or not the axes are drawn.

Parametric 3D plotting

Sage can also plot functions of two variables that are defined in terms of a parameter. You can make very complex surfaces in this way.

Time for action – parametric plots in 3D

We will plot two interlocking rings to demonstrate how complex surfaces are easily plotted using three functions of two parameters:

var('u, v')
f1 = (4 + (3 + cos(v)) * sin(u), 4 + (3 + cos(v)) * cos(u),
4 + sin(v))
f2 = (8 + (3 + cos(v)) * cos(u), 3 + sin(v), 4 + (3 + cos(v))
* sin(u))
p1 = parametric_plot3d(f1, (u, 0, 2 * pi), (v, 0, 2 * pi),
p2 = parametric_plot3d(f2, (u, 0, 2 * pi), (v, 0, 2 * pi),
combination = p1 + p2

The result should look like this:

Sage Beginner's Guide

What just happened?

We made a very complex 3D shape using the parametric_plot3d function. The optional arguments for this function are the same as the options for the plot3d function.

Contour plots

Sage can also make contour plots, which are 2-D representations of 3-D surfaces. While 3D plots are eye-catching, a 2D plot can be a more practical way to convey information about the function or data set.

Time for action – making some contour plots

The following code will demonstrate four different ways to make a 2D plot of a 3D surface with Sage:

var('x, y')
text_coords = (2, -3.5)
cp = contour_plot(y^2 + 1 - x^3 - x, (x, -3, 3), (y, -3, 3),
contours=8, linewidths=srange(0.5, 4.0, 0.5), fill=False,
labels=True, label_colors='black', cmap='gray', colorbar=False)
cp += text("Contour", text_coords)
ip = implicit_plot(y^2 + 1 - x^3 - x, (x, -3, 3), (y, -3, 3))
ip += text("Implicit", text_coords)
rp = region_plot(y^2 + 1 - x^3 - x < 0, (x, -3, 3), (y, -3, 3),
incol=(0.8, 0.8, 0.8)) # color is an (R,G,B) tuple
rp += text("Region", text_coords)
dp = density_plot(y^2 + 1 - x^3 - x, (x, -3, 3), (y, -3, 3))
dp += text("Density", text_coords)
show(graphics_array([cp, ip, rp, dp], 2, 2), aspect_ratio=1,
figsize=(6, 6))

The output should be as follows:

Sage Beginner's Guide

What just happened?

The plots we made demonstrate four different ways of visualizing the function we plotted in the previous example. All four functions follow the same syntax as plot3d:

contour_plot(f(x,y), (x, x_min, x_max), (y, y_min, y_max))

contour_plot plots level curves on the surface. In other words, z is constant on each curve. implicit_plot does the same thing, but only plots the curve where z=0. region_plot determines the curve for which z=0, and then fills in the region where z<0. Finally, density_plot converts the z value of the function to a color value and plots a color map of the z values over the x-y plane. We used the contour plot to demonstrate some of the keyword arguments that can be used to control the appearance of the plot. Here is a summary of the options we used:

Keyword Description
contours The number of contours to draw
linewidths A list of line widths, corresponding to the number of contours
fill True to fill in between the contours
labels True to label each contour
label_colors Color to use for labels
cmap Color map to use for contour lines
colorbar True to display the a scale bar showing the color map


In this article we learned about making three-dimensional plots and contour plots.

Further resources on this subject:


Please enter your comment!
Please enter your name here