MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Graphics and DisplayFunction

  • To: mathgroup at
  • Subject: [mg98181] Re: Graphics and DisplayFunction
  • From: Szabolcs Horvát <szhorvat at>
  • Date: Wed, 1 Apr 2009 05:58:40 -0500 (EST)
  • References: <gqsn9m$3tr$>

replicatorzed at wrote:
> Does anyone know why the following code fails to return the second
> Graphics object?
> ListPlot[{1, 2, 3}, DisplayFunction -> Print];
> Graphics[{Circle[]}, DisplayFunction -> Print];
> Even the coloring of the syntax differs for the two: after ListPlot
> [...], the semicolon is red indicating its unnecessary presence, while
> the one after Graphics[...] is left black. I would think that with the
> generalized input of Mathematica 6, the two would behave the same way,
> but apparently they do not.
> I know how to solve this with Show. I just simply don't understand why
> these two behave differently, if both produce (without specifying
> DisplayFunction) Graphics objects:
> In[104]:= Print[InputForm[ListPlot[{1, 2, 3}]]];
> Print[InputForm[Graphics[{Circle[]}]]];
> During evaluation of In[104]:= Graphics[{Hue[0.67, 0.6, 0.6], Point
> [{{1., 1.}, {2., 2.}, {3., 3.}}]}, {AspectRatio -> GoldenRatio^(-1),
> Axes -> True, AxesOrigin -> {0, Automatic}, PlotRange -> Automatic,
> PlotRangeClipping -> True}]
> During evaluation of In[104]:= Graphics[{Circle[{0, 0}]}]
> In[106]:= Head[ListPlot[{1, 2, 3}]]
> Head[Graphics[{Circle[]}]]
> Out[106]= Graphics
> Out[107]= Graphics

As you said, both produce Graphics expressions. (More precisely, 
Graphics *is* a Graphics expression.) But there's a difference:  while 
Graphics[] is just a way to *represent* graphics, plotting functions 
also have a side effect of *displaying* the graphics expressions that 
they produce.

In Mathematica <= 5.2 it worked like this: Graphics expressions were 
formatted in the front end as --Graphics--, and they could be rendered 
with Show[] (which called a function specified in DisplayFunction)

In Mathematica >= 6, Graphics expressions are formatted as the actual 
picture they represent (in StandardForm/TranditionalForm).  Apart from 
this, everything works the same as in 5.2.  Of course since the graphics 
are formatted nicely in the front end, there's no need for displaying 
them in an explicit way, so $DisplayFunction === Identity by default.

But suppose now that you can't/don't use the front end for some reason, 
or use an alternative front end.  Now it does make sense to use an 
explicit command for showing the graphics.  Try opening the command line 
version, and type <<Terminal` or <<JavaGraphics`.

The reason for the semicolon not being highlighted after Graphics[]; is 
that in 5.2 no one typed Graphics[...] expecting to get a plot, but 
using Plot[...]; was quite common (to suppress displaying the return 
value, --Graphics--)

  • Prev by Date: Re: Using a variable set elsewhere within Manipulate
  • Next by Date: Re: Palette Tutorial/training help
  • Previous by thread: Re: Using a variable set elsewhere within Manipulate
  • Next by thread: Re: Graphics and DisplayFunction