This HTML document is based on Mathematica Graphics: An Intensive Tutorial by Tom WickhamJones. It was adapted by Martin Kraus for noncommercial use.
Mathematica and MathLink are registered trademarks, and MathReader, MathSource and 3Script are trademarks of Wolfram Research, Inc.
All other product names mentioned are trademarks of their producers.
Copyright 1992 by Wolfram Research, Inc.
All rights reserved. No part of this document may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, without the prior written permission of the copyright holder.
Chapter 3 
Graphics Output 
3.1 Graphics Commands and Objects 

3.2 Hardcopy Output 

This chapter discusses the steps which are carried out when a Mathematica graphic is rendered. It first shows how the plotting commands construct primitives and produce a particular type of graphic. Then we see how the primitives are rendered into PostScript. This is followed with a discussion of the ways in which hardcopy output can be obtained. 
We have seen how Mathematica can produce a number of different types of graphical objects. These include twodimensional graphics, threedimensional graphics and special types which represent images such as simple surfaces. The special types exit for efficiency reasons.
Graphics  twodimensional picutres  
SurfaceGraphics  simple threedimensional surfaces  
Graphics3D  general threedimensional picutres  
ContourGraphics  contour diagrams  
DensityGraphics  bitmaps  
GraphicsArray  arrays of other pictures  
Sound  sounds 
Builtin commands are provided to construct all these objects. As examples we have seen how Plot3D and ListPlot3D can produce simple surfaces and how ParametricPlot3D produces more general threedimensional images. For all the graphical objects listed above there is a number of commands which will generate them.
Command  Object 
Plot, ParametricPlot, ListPlot  Graphics 
Plot3D, ListPlot3D  SurfaceGraphics 
ContourPlot, ListContourPlot  ContourGraphics 
DensityPlot, ListDensityPlot  DensityGraphics 
ParametricPlot3D  Graphics3D 
Play, ListPlay  Sound 
Each command works by constructing the appropriate object. For example Plot builds a Graphics object. As an aside one should note the distinction between the generic use of the term graphics and the particular use of the Mathematica command Graphics. The latter is the Mathematica expression which holds twodimensional graphics.
As can be seen there are many easy ways provided to generate all these different types of pictures. Here we shall look in more detail at a typical command, ParametricPlot3D. We can see the actual result, the Mathematica expression which is returned, by using the Mathematica command InputForm; the drawing of the picture is a side effect of the evaluation which returned this object.
This draws a picture.  In[1]:= ParametricPlot3D[{t, t^2, t^3},
{t, 0, 1}, PlotPoints > 9] 
Out[1]=  Graphics3D  

This is the result returned to Mathematica by the ParametricPlot3D command. The primitives which are found in a result like this are described in the next chapter.  In[2]:= InputForm[%] Out[2]//InputForm= Graphics3D[{Line[{{0., 0., 0.}, {0.125, 0.015625, 0.001953125}}], Line[{{0.125, 0.015625, 0.001953125}, {0.25, 0.0625, 0.015625}}], Line[{{0.25, 0.0625, 0.015625}, {0.375, 0.140625, 0.052734375}}], Line[{{0.375, 0.140625, 0.052734375}, {0.5, 0.25, 0.125}}], Line[{{0.5, 0.25, 0.125}, {0.625, 0.390625, 0.244140625}}], Line[{{0.625, 0.390625, 0.244140625}, {0.75, 0.5625, 0.421875}}], Line[{{0.75, 0.5625, 0.421875}, {0.875, 0.765625, 0.669921875}}], Line[{{0.875, 0.765625, 0.669921875}, {1., 1., 1.}}]}, {PlotRange > Automatic, DisplayFunction :> $DisplayFunction, ColorOutput > Automatic, Axes > True, PlotLabel > None, AxesLabel > None, Ticks > Automatic, Prolog > {}, Epilog > {}, AxesStyle > Automatic, Background > Automatic, DefaultColor > Automatic, DefaultFont :> $DefaultFont, AspectRatio > Automatic, ViewPoint > {1.3, 2.399999999999999, 2.}, Boxed > True, BoxRatios > Automatic, Plot3Matrix > Automatic, Lighting > True, AmbientLight > GrayLevel[0.], LightSources > {{{1., 0., 1.}, RGBColor[1, 0, 0]}, {{1., 1., 1.}, RGBColor[0, 1, 0]}, {{0., 1., 1.}, RGBColor[0, 0, 1]}}, ViewCenter > Automatic, PlotRegion > Automatic, ImageSize > Automatic, TextStyle :> $TextStyle, FormatType :> $FormatType, ViewVertical > {0., 0., 1.}, FaceGrids > None, Shading > True, RenderAll > True, PolygonIntersections > True, AxesEdge > Automatic, BoxStyle > Automatic, SphericalRegion > False}] 
1. fun[t] is evaluated for t varying from tmin to tmax. 
2. These points are placed in line primitives and given a head of Graphics3D. 
3. The Graphics3D object is passed to Show, which processes options and calls DisplayFunction which typically causes PostScript to be emitted. 
4. The Graphics3D object is returned as the result. 
It is Show which actually invokes the PostScript interpreter. We can pass the result back into Show again.  In[3]:= Show[%] 
Out[3]=  Graphics3D  
We have seen some of the different uses of Show such as redisplaying graphics and changing options. Later we will see how it can combine pictures by carrying out appropriate conversions. However maybe the most important use of Show is to call the DisplayFunction.
All the graphics commands have the option DisplayFunction. This defaults to $DisplayFunction which is set to send the graphics to $Display. The latter will invoke the PostScript interpreter for the window system your computer is using.
Default setting of DisplayFunction option.  In[4]:= Options[Plot, DisplayFunction] Out[4]= {DisplayFunction :> $DisplayFunction} 
Default value of $DisplayFunction.  In[5]:= $DisplayFunction Out[5]= Display[$Display, #1]& 
Show[obj1, obj2, ... , opts]  combine pictures, process options and call DisplayFunction. 
Display[stream, object]  send PostScript representation of object to stream. 
Display[stream, object, "format"]  send object to stream in the specified format 
Generally one does not want to change the DisplayFunction. However, there are resons why you may wish to do this. You maybe want to write your own renderer and use MathLink. Then if you made the correct assignment to DisplayFunction all the commands like ParametricPlot3D and Show would just work. Another use is to set DisplayFunction to be Identity. This suppresses the production of PostScript. In certain situations this is very useful.
This produces no pictures. The result can be used in GraphicsArray.  In[6]:= Table[Plot[x^n, {x, 0, 2},
DisplayFunction > Identity], {n, 1, 4, 1}] Out[6]= { Graphics ,  Graphics ,  Graphics ,  Graphics } 
We have seen how the Mathematica kernel can render a sequence of graphics primitives into PostScript. In this section we examine how to obtain hardcopy output from this stream. This is done by rendering the picutre into PostScript with the command Display. We saw in the last section that by default Display is called automatically by Show. However we can call it directly with a toplevel command and maybe send the PostScript somewhere other than to an interpreter. For example we can send it into a file.
This sends PostScript into the file tmp.ps. Here we use Display directly.  In[7]:= Display["tmp.ps", Graphics3D[Line[{{0, 0, 0}, {1, 1, 1}}]]] Out[7]=  Graphics3D  
Here are the contents of the file which resulted. Note that it is not standard PostScript.  In[8]:= !!tmp.ps %! %%Creator: Mathematica %%AspectRatio: 1.0855 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 1 roll add 3 1 roll add exch } bind def %% Graphics3D %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0567234 1.16608 3.33392e17 1.16608 [ [ 0 0 0 0 ] [ 1 1.0855 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid [ ] 0 setdash .08846 .24555 m 0 .80374 L s 0 .80374 m .40037 1.0855 L s .40037 1.0855 m .41799 .58158 L s .41799 .58158 m .08846 .24555 L s .67245 0 m .92713 .41497 L s .92713 .41497 m 1 .94814 L s 1 .94814 m .70644 .58546 L s .70644 .58546 m .67245 0 L s .08846 .24555 m 0 .80374 L s 0 .80374 m .70644 .58546 L s .70644 .58546 m .67245 0 L s .67245 0 m .08846 .24555 L s .41799 .58158 m .92713 .41497 L s .92713 .41497 m 1 .94814 L s 1 .94814 m .40037 1.0855 L s .40037 1.0855 m .41799 .58158 L s 0 0 m 1 0 L 1 1.0855 L 0 1.0855 L closepath clip newpath .5 Mabswid .10855 .26104 m .97657 .93008 L s .25 Mabswid .67245 0 m .92713 .41497 L s .92713 .41497 m 1 .94814 L s 1 .94814 m .70644 .58546 L s .70644 .58546 m .67245 0 L s .08846 .24555 m 0 .80374 L s 0 .80374 m .70644 .58546 L s .70644 .58546 m .67245 0 L s .67245 0 m .08846 .24555 L s % End of Graphics MathPictureEnd 
Thus Display can send a PostScript form of a Mathematica graphics to a file. However, this PostScript is not suitable to be sent to a printer. This is because PostScript procedure definitions must be added. The methods which are available to work with Mathematica PostScript depend upon whether your front end supports Notebooks or not.
On a Notebook front end it is very easy to print a picture. One simply pulls down the menu item for printing and everything works in the typical way for your particular type of computer. You set up the printer you want and you print. The PostScript header is added automatically.
On front ends which do not support Notebooks the situation is more complex. One of the major reasons for this is that the operating system on Notebook front ends does a large amount of work. On front ends without Notebooks the operating system typically provides fewer facilities. To print a graphic one uses the command PSPrint. This will add header information and send the result to your default printer.
Alternatively, you may wish to make a PostScript file that can be added into some other application program. This involves writing an Encapsulated PostScript file, an EPSF.
This sends Encapsulated PostScript into the file tmp.eps. Many other formats like GIF, PICT, Metafile, etc. are possible.  In[9]:= Display["tmp.eps", Graphics3D[Line[{{0, 0, 0}, {1, 1, 1}}]], "EPS"] Out[9]=  Graphics3D  
next page: 4 Advanced Graphics  back to table of contents 