f



Missing Graphics

Re Mathematica 5.1.

This code displays (as intended) five versions of g (first two are same):

g = Plot3D[Sin@x Cos@y, {x, -PI, PI}, {y, -PI, PI}];

Scan[Show@#@g &, {SurfaceGraphics, Graphics, ContourGraphics, 
    DensityGraphics}];

However, when DisplayFunction->Identity is added to Plot3D, only the SurfaceGraphics plot appears.  Why don't the others?

Thankx.

Bruce

0
vze269bv (80)
2/15/2005 2:59:49 AM
comp.soft-sys.math.mathematica 28821 articles. 0 followers. Follow

3 Replies
294 Views

Similar Articles

[PageSpeed] 20

Bruce,

The following works.

g = Plot3D[Sin@x Cos@y, {x, -Pi, Pi}, {y, -Pi, Pi},
      DisplayFunction -> Identity];

Scan[Show[#@g ,
        DisplayFunction -> $DisplayFunction] &, {SurfaceGraphics, Graphics,
      ContourGraphics,
    DensityGraphics}];

But if we leave the DisplayFunction -> $DisplayFunction out of the Show
statement, why does the Graphics case display? I would expect none of them
to display. Is this another case where WRI has forgotten to copy over one of
the options in the graphics conversion routines?

David Park
djmp@earthlink.net
http://home.earthlink.net/~djmp/


From: Bruce Colletti [mailto:vze269bv@verizon.net]

Re Mathematica 5.1.

This code displays (as intended) five versions of g (first two are same):

g = Plot3D[Sin@x Cos@y, {x, -PI, PI}, {y, -PI, PI}];

Scan[Show@#@g &, {SurfaceGraphics, Graphics, ContourGraphics,
    DensityGraphics}];

However, when DisplayFunction->Identity is added to Plot3D, only the
SurfaceGraphics plot appears.  Why don't the others?

Thankx.

Bruce




0
djmp (1214)
2/15/2005 4:43:48 AM
>-----Original Message-----
>From: Bruce Colletti [mailto:vze269bv@verizon.net] 
>Sent: Tuesday, February 15, 2005 3:51 AM
>To: mathgroup@smc.vnet.net
>Subject:  Missing Graphics
>
>Re Mathematica 5.1.
>
>This code displays (as intended) five versions of g (first two 
>are same):
>
>g = Plot3D[Sin@x Cos@y, {x, -PI, PI}, {y, -PI, PI}];
>
>Scan[Show@#@g &, {SurfaceGraphics, Graphics, ContourGraphics, 
>    DensityGraphics}];
>
>However, when DisplayFunction->Identity is added to Plot3D, 
>only the SurfaceGraphics plot appears.  Why don't the others?
>
>Thankx.
>
>Bruce
>
>

Bruce,

it's not the SurfaceGraphics which appears -- that would be queer -- yet
the Graphics, which is ok, see:

In[10]:= Options[#[g], DisplayFunction] & /@ 
  {SurfaceGraphics, Graphics, ContourGraphics, DensityGraphics}

>From In[10]:=
Options::"optnf": DisplayFunction is not a known option for - Graphics -

Out[10]=
{{DisplayFunction -> Identity}, {}, {DisplayFunction -> Identity},
{DisplayFunction -> Identity}}


As DisplayFunction is no option for Graphics it cannot be retained; in
fact no option of g is retained. If you look at

In[13]:= Options[g]

you'll indeed note that none of those would make sense after the
conversion of g to a 2D object.


--
Hartmut Wolf

0
Hartmut.Wolf (216)
2/16/2005 8:30:05 PM
>-----Original Message-----
>From: Andrzej Kozlowski [mailto:akoz@mimuw.edu.pl] 
>Sent: Thursday, February 17, 2005 12:24 AM
>To: Wolf, Hartmut
>Cc: mathgroup@smc.vnet.net
>Subject: Re: 
>
>
>On 16 Feb 2005, at 20:35, Wolf, Hartmut wrote:
>
>>
>>> -----Original Message-----
>>> From: Bruce Colletti [mailto:vze269bv@verizon.net]
>> To: mathgroup@smc.vnet.net
>>> Sent: Tuesday, February 15, 2005 3:51 AM
>>> To: mathgroup@smc.vnet.net
>>> Subject:  Missing Graphics
>>>
>>> Re Mathematica 5.1.
>>>
>>> This code displays (as intended) five versions of g (first two are 
>>> same):
>>>
>>> g = Plot3D[Sin@x Cos@y, {x, -PI, PI}, {y, -PI, PI}];
>>>
>>> Scan[Show@#@g &, {SurfaceGraphics, Graphics, ContourGraphics,
>>>    DensityGraphics}];
>>>
>>> However, when DisplayFunction->Identity is added to Plot3D, 
>only the 
>>> SurfaceGraphics plot appears.  Why don't the others?
>>>
>>> Thankx.
>>>
>>> Bruce
>>>
>>>
>>
>> Bruce,
>>
>> it's not the SurfaceGraphics which appears -- that would be queer -- 
>> yet the Graphics, which is ok, see:
>>
>> In[10]:= Options[#[g], DisplayFunction] & /@
>>   {SurfaceGraphics, Graphics, ContourGraphics, DensityGraphics}
>>
>> From In[10]:=
>> Options::"optnf": DisplayFunction is not a known option for -
Graphics -
>>
>> Out[10]=
>> {{DisplayFunction -> Identity}, {}, {DisplayFunction -> Identity}, 
>> {DisplayFunction -> Identity}}
>>
>>
>> As DisplayFunction is no option for Graphics it cannot be retained;
in 
>> fact no option of g is retained. If you look at
>>
>> In[13]:= Options[g]
>>
>> you'll indeed note that none of those would make sense after the 
>> conversion of g to a 2D object.
>>
>>
>> --
>> Hartmut Wolf
>>
>>
>
>
>Hartmut is as usual right but the way the explanation is 
>expressed is confusing. DisplayFunction is certainly an option 
>for Graphics and
>indeed:
>
>
>
>Options[Plot[x^2, {x, -1, 1}], DisplayFunction]
>
>
>{DisplayFunction :> $DisplayFunction}
>
>but not for Graphics objects that result by converting 
>Graphics3D or SurfaceGraphics objects:
>
>
>Options[Graphics[Plot3D[x^2 + y^2, {x, -1, 1},
>     {y, -1, 1}]], DisplayFunction]
>
>  DisplayFunction is not a known option for Graphics
>
>{}
>
>As stated literally this message actually looks false!
>
>
>
>Andrzej Kozlowski
>Chiba, Japan
>http://www.akikoz.net/andrzej/index.html
>http://www.mimuw.edu.pl/~akoz/
>
>

Yes, Andrzej,

Graphics here appears as a chimaera: it is 

(1)
an inert _container_ for (structures of) 2D graphical primitives as
Point, Line etc. to be displayed by Show and (optionally) including
certain options associated with the object, which wait to be interpreted
by Show (as well as the primitives do). As 

  Options[Graphics]

tells, there are even defaults, which however, are not passed to the
graphical objects, but wait for interpretation at Show (if not supplied
with the object):

In[8]:= l2D = Graphics[Line[{{0, 0}, {1, 1}}]]
Out[8]= - Graphics -

In[10]:= Options[l2D]
Out[10]= {}


In[18]:= Show[l2D]
Out[18]= - Graphics -

just draws the line.  If we reset a default, e.g.

In[21]:=
SetOptions[Graphics, Background -> Hue[1/6, .5, 1]]

and then draw

In[22]:= Show[l2D]
Out[22]= - Graphics -

the same object now is drawn in front of a yellow background.


If we put specific options into the Graphics container these will be
used:

In[27]:= Show[l2D0 = Append[l2D, Background -> Automatic]]
Out[27]= - Graphics -

In[28]:= Options[l2D0]
Out[28]= {Background -> Automatic}


This however is not an Option associated with the symbol l2D0, but just
read from its container.

In[25]:= SetOptions[Unevaluated[l2D], Background -> Automatic]
>From In[25]:=
SetOptions::"optnf": Background is not a known option for l2D.


Deplorably the options for Graphics do not work as a filter in a similar
sense, it is possible to put nonsensical options into the container
waiting to be spotted by Show:

In[16]:= Graphics[Line[{{0, 0}, {1, 1}}], WorkingPrecision -> 16]
Out[16]= - Graphics -

In[17]:= % // Show
>From In[17]:=
Graphics::"optx": Unknown option WorkingPrecision in - Graphics -



(2)
At the other side Graphics is a _function_ to convert 3D graphical
objects to a 2D object, whose primitives are now enclosed in the
_container_ graphics -- of course.


As I had stated, the usual options associated with a 3D graphics object
are not to be retained, so it obviously was the choice of WRI not to
keep any of them when converting.  I tend to defend this.


Interestingly, with

In[36]:= Show[Append[Graphics[g], Options[g]]]
Out[36]= - Graphics -

DisplayFunction -> Identity becomes effective, and no error occurs, but
when trying

In[37]:= Show[Append[Graphics[g], Options[g]], DisplayFunction ->
$DisplayFunction]
>From In[37]:=
Graphics::"optx": Unknown option ViewPoint in - Graphics -

Show bails out at the first nonsensical option it encounters.


The whole scheme seems to be quite reasonable, in particular not to
associate defaults to Show but to the symbols that constitute the
containers (or say "data types") for the graphical objects.  Thus you
may invent your own graphical types and extend Show to display them.



Definitely my first explanation as stated is wrong and void; we just
observe the fact that the option DisplayFunction (as any option) is not
retained with the conversion.  The error message refers to the converted
object -- expressed as container Graphics -- and does not refer to the
symbol Graphics!

Thanks, Andrzej!

Hartmut

0
Hartmut.Wolf (216)
2/17/2005 3:32:45 PM
Reply: