MathGroup Archive 2000

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

Search the Archive

Re: Suppressing display of LogPlots

  • To: mathgroup at smc.vnet.net
  • Subject: [mg22604] Re: [mg22568] Suppressing display of LogPlots
  • From: Hartmut Wolf <hwolf at debis.com>
  • Date: Mon, 13 Mar 2000 11:03:21 -0500 (EST)
  • Organization: debis Systemhaus
  • References: <200003112252.RAA03265@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Dr Dan schrieb:
> 
> There is a programming oversight (er, bug) in the Graphics` package
> that interferes with the delayed evaluation of DisplayFunction
> options.  A common trick to suppress the display of graphics is to wrap
> Plot in a Block function:
> 
> In[1]:=
> Block[{$DisplayFunction = Identity},
>    g1 = Plot[Sin[x], {x, 0, 3*Pi}]; ];
> 
> In[2]:=
> Show[g1]
> 
> ---------plot deleted
> Out[2]=
> -Graphics-
> 
> However, this trick does not work for many plot types defined in the
> Graphics`Graphics` package:
> 
> In[3]:=
> << "Graphics`Graphics`"
> 
> In[4]:=
> Block[{$DisplayFunction = Identity},
>    g2 = LogLinearPlot[Sin[x], {x, 0, 3*Pi}]; ];
> 
> In[5]:=
> Show[g2]
> 
>  ------------- plot doesn't show!
> Out[5]=
> -Graphics-
> 
> We can see why the plot does not display outside the Block by checking
> the DisplayFunction options in the graphic:
> 
> In[6]:=
> Options[g2, DisplayFunction]
> 
> Out[6]=
> {DisplayFunction -> Identity, DisplayFunction :> Identity}
> 
> I have tracked this bug to the utility functions ScaledPlot and
> ScaledListPlot in Graphics.m.  Since I am not brave enough to attempt
> to fix the code, I created the following hack:
> 
> DisplayFunctionHack[Graphics[args__,
>     (opts___)?OptionQ]] := Graphics[args,
>    {Flatten[{DisplayFunction :> $DisplayFunction,
>       DeleteCases[Flatten[{opts}], (Rule | RuleDelayed)[
>         DisplayFunction, _]]}]}]
> 
> The DeleteCases is not strictly necessary, but I like to clean up.  We
> can see the effect of the hack by checking the options of the graphic
> again:
> 
> In[8]:=
> g3 = DisplayFunctionHack[g2];
> 
> In[9]:=
> Options[g3, DisplayFunction]
> 
> Out[9]=
> {DisplayFunction :> $DisplayFunction}
> 
> Now the graphics displays properly:
> 
> In[10]:=
> Show[g3]
> 
> ----------------graphic deleted, but trust me, it was here.
> Out[10]=
> -Graphics-
> 
> Sent via Deja.com http://www.deja.com/
> Before you buy.


Dr. Dan,

if I do

In[7]:= Show[g2, DisplayFunction -> $DisplayFunction]

-- Graphics deleted, was there --

Out[7]= Graphics[]

I see the plot, so where's the bug?

Block gives you the guarantee that the plot operations inside wouldn't
show, nothing else! If $DisplayFunction -- the current "default display
function" -- is explicitly referenced inside the Block as part of a
definition, the referenced value will prevail, e.g. inside of g2.

Of course you can reset this immediately:

In[10]:=
g2 = Block[{$DisplayFunction = Identity}, 
      LogLinearPlot[Sin[x], {x, 0, 3*Pi}]] /. 
        {(DisplayFunction -> Identity) -> (DisplayFunction ->
$DisplayFunction)}
Out[10]= Graphics[]

In[11]:= Show[g2]

-- Graphics deleted, was there --

Out[11]= Graphics[]


Hartmut


  • Prev by Date: Re: external files and strings
  • Next by Date: Re: Trouble with backspace under Linux/i386
  • Previous by thread: Suppressing display of LogPlots
  • Next by thread: Re: Suppressing display of LogPlots