       Re: No Show

• To: mathgroup at smc.vnet.net
• Subject: [mg89112] Re: No Show
• From: Helen Read <hpr at together.net>
• Date: Mon, 26 May 2008 01:29:34 -0400 (EDT)
• References: <g1bf08\$mcv\$1@smc.vnet.net>

```Narasimham wrote:
> Why is the following plot, bot, (with - Sqrt) not Shown along with
> top?
>
> Why is it treated only as a plot skeleton, so no combining is
> possible?
>
> bot = Plot3D[-Sqrt[1 - (x^2 + y^2) ] , {x, -1, 1}, {y, -1, 1}]
> top = Plot3D[+Sqrt[1 - (x^2 + y^2) ] , {x, -1, 1}, {y, -1, 1}]
> Show[top, bot]

Oh, you are going to get a lot of replies to this. It was discussed at
length when v.6 was first released. Basically, as of v.6, the  default
behavior of Show is to get the PlotRange from the first plot listed. See
what happens if you reverse it.

Show[bot, top]

The way to get something more like you are expecting is to set
PlotRange->Automatic within Show.

bot = Plot3D[-Sqrt[1 - (x^2 + y^2)], {x, -1, 1}, {y, -1, 1}];
top = Plot3D[+Sqrt[1 - (x^2 + y^2)], {x, -1, 1}, {y, -1, 1}];
Show[top, bot, PlotRange -> Automatic]

You might also want to set the BoxRatios.

bot = Plot3D[-Sqrt[1 - (x^2 + y^2)], {x, -1, 1}, {y, -1, 1}];
top = Plot3D[+Sqrt[1 - (x^2 + y^2)], {x, -1, 1}, {y, -1, 1}];
Show[top, bot, PlotRange -> Automatic, BoxRatios -> {1, 1, 1}]

I greatly dislike this new behavior of Show, for what it's worth. The
folks at WRI argue that because of all the new graphics options (e.g.,
Filling), it would not make sense to combine the PlotRange automatically
(as Show did in previous versions of Mathematica). Personally, I find it
to be a pain in the neck to have to ask for PlotRange->Automatic
virtually every time I use Show, and my students often forget and get
burned by it. I would much prefer PlotRange->Automatic to be the default
in Show, and to set my own PlotRange manually on those infrequent
occasions when I need something else. And as for the argument that
setting a PlotRange automatically from the combined plots isn't always
appropriate, why not provide an easy way to tell Show to use the
PlotRange from a particular plot? Something like PlotRange->{1} to get
the PlotRange from the first plot, PlotRange->{2} to get the range from
the 2nd plot, etc., would do the job when needed, and still allow
PlotRange->Automatic (which for me is almost always what I want) to be
the default.

I just now discovered, BTW, that

SetOptions[Show, PlotRange -> Automatic]

does not even work. It generates an error message claiming that
"PlotRange is not a known option for Show".

--