I am new to Mathematica and stuck with one problem i.e.

How can I add a graphics option to an already made plot which a manipulator to control itself.

s = Manipulate[
     DiscretePlot[Sin[a t], {t, 0, 2 Pi, Pi/6}, ExtentSize -> Full, 
      ImageSize->Scaled[1], AspectRatio -> .2]], {a}], 
   OpenerView[{"Vertical", Control[{{a, 1, "Manipulator"}, 1, 30}]}], 
   ControlPlacement -> Bottom]

Mathematica graphics

Now I want to add a plot Label by calling the already produced plot s because I don't want the duplication of code again as I have to use 4 more different plots in a popupmenu. For example, when I select s from then popupmenu then it should give the output t

t = Show[s, PlotLabel -> "Popup Window Plot"]  

but this is showing error Show::gtype: Manipulate is not a type of graphics.

Is there any way to sort out this problem?

Note: The MathGroup version of the same question is found here.

  • 1
    $\begingroup$ Welcome to Mathematica.SE! In future question, you can use the formatting controls in the post editor (the {} icon, etc.) to make your post readable. I fixed up the formatting now (you can click the edit link under the post to see how I did it). I also removed the superfluous ] character from the end of the first code block. $\endgroup$
    – Szabolcs
    May 28, 2012 at 9:32
  • 1
    $\begingroup$ I can't test now, but would the following work? t = s /. g_Graphics->Show[g, PlotLabel -> "Popup Window Plot"] $\endgroup$
    – celtschk
    May 28, 2012 at 9:32
  • $\begingroup$ There is an unnecessary Graphics wrapper in the code. Though it turns out to be very useful in the sense that one does not have to write a replacement (a la @celtschk) that lists all possible plot types. $\endgroup$ May 28, 2012 at 10:05
  • $\begingroup$ [When you cross-post to MathGroup, please link the questions/answers together.] (I edited your post to include the link.) (meta.mathematica.stackexchange.com/a/368/12) If you get a good answer there, please come back here and summarize it. $\endgroup$
    – Szabolcs
    May 30, 2012 at 10:03

2 Answers 2


Maybe as an alternative you could define s as a function, e.g.

s[opt : OptionsPattern[Plot]] := 
   DiscretePlot[Sin[a t], {t, 0, 2 Pi, Pi/6},
    ExtentSize -> Full, ImageSize -> Scaled[1], AspectRatio -> .2], {a}], 
  OpenerView[{"Vertical", Control[{{a, 1, "Manipulator"}, 1, 30}]}], 
  ControlPlacement -> Bottom]

then for example s[] would give you the original Manipulate and s[PlotLabel -> "Popup Window Plot"] would add a label to the plot inside the Manipulate, etc.


Try this:

MapAt[Show[#, PlotLabel -> "Popup Window Plot"] &, s, {1, 1}]

The part specification {1, 1} should point to your Graphics object.

To affect any Graphics in s use as suggested by celtschk:

s /. g_Graphics -> Show[g, PlotLabel -> "Popup Window Plot"]
  • $\begingroup$ I think you need to use SetDelayed in the latter example to replace g, otherwise it drops an error. $\endgroup$ May 28, 2012 at 10:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.