# Sage: 3D Data Plotting

Your details (so we can tell your friend who this is from) *
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
j
4
Y
E
n
z
by Craig Finch | May 2011 | Open Source

Sage can make 3D plots for visualizing functions of two variables, as well as parametric plots that create three-dimensional surfaces. It also has a variety of tools for making two dimensional representations of three-dimensional surfaces.

In this article by Craig Finch, author of Sage Beginner's Guide, we will make interactive 3D plots of functions of two variables.

## Sage Beginner's Guide

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

(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))p3d.show()`

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:

## 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:

`p3d.show(viewer='tachyon', frame=False, axes=True)`

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

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),     texture="red")p2 = parametric_plot3d(f2, (u, 0, 2 * pi), (v, 0, 2 * pi),     texture="blue")combination = p1 + p2combination.show()`

The result should look like this:

## 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) tuplerp += 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:

## 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

# Summary

Further resources on this subject:

## Sage Beginner's Guide

 Unlock the full potential of Sage for simplifying and automating mathematical computing with this book and eBook
Published: May 2011
eBook Price: €23.99
Book Price: €38.99
See more

## Craig Finch

Craig Finch is a Ph. D. candidate in the Modeling and Simulation program at the University of Central Florida (UCF). He earned a Bachelor of Science degree from the University of Illinois at Urbana-Champaign and a Master of Science degree from UCF, both in electrical engineering. Craig worked as a design engineer for TriQuint Semiconductor, and currently works as a research assistant in the Hybrid Systems Lab at the UCF NanoScience Technology Center. Craig's professional goal is to develop tools for computational science and engineering and use them to solve difficult problems. In particular, he is interested in developing tools to help biologists study living systems. Craig is committed to using, developing, and promoting open-source software. He provides documentation and "how-to" examples on his blog at http://www.shocksolution.com.

I would like to thank my advisers, Dr. J. Hickman and Dr. Tom Clarke, for giving me the opportunity to pursue my doctorate. I would also like to thank my parents for buying the Apple IIGS computer that started it all.