22
$\begingroup$

I would like to know whether there is a way to insert a plot into another plot. I would like to do some plot from a function an then, inside this plot, in the right down corner add a smaller plot of the same function covering a smaller region. I tried with Epilog but it's not possible that way, it gives me a fail

Thanks in advance!

$\endgroup$
  • $\begingroup$ You've seen Inset[]? $\endgroup$ – J. M. is away Nov 14 '12 at 9:54
18
$\begingroup$

...or do it dynamically so you can position the inset where you like it:

DynamicModule[{pt = Scaled[{0.5, 0.5}]},

 Plot[Sin[x], {x, 0, 2 Pi},
  PlotRange -> All, 
  Epilog -> {Dynamic[
     Locator[Dynamic[pt], 
      Plot[Cos[x], {x, 0, 2 Pi}, Background -> White, 
       ImageSize -> 150]]]}]]

enter image description here

$\endgroup$
  • 3
    $\begingroup$ 1+ I liked this Dynamic tip! Cool! $\endgroup$ – Murta Nov 14 '12 at 13:53
  • $\begingroup$ That is pretty nice, but is there a method by which you can read the coordinates after you are done with placing? $\endgroup$ – Daniele Binosi Aug 2 '18 at 14:16
15
$\begingroup$

You can use Inset for this

Building a new Graphics

gr1 = Plot[Sin[x]^2, {x, 0, 6 Pi}];
gr2 = Plot[Sin[x]^2, {x, 0, Pi}];

Graphics[{First[gr1], Inset[gr2, {15, -.6}, Automatic, Scaled[.4]]}, 
 PlotRange -> {Automatic, {-1, 1}}, AbsoluteOptions[gr1]]

Mathematica graphics

Using Epilog

Plot[Sin[x]^2, {x, 0, 6 Pi}, PlotRange -> {Automatic, {-1, 1}}, 
 Epilog -> {Inset[gr2, {15, -.6}, Automatic, Scaled[.4]]}]
$\endgroup$
  • 1
    $\begingroup$ Ha Yep, question solved! That's what I was looking for! And with Background->White option it covers the old plot if necessary! Thanks a lot! $\endgroup$ – pablo Nov 14 '12 at 10:02
  • $\begingroup$ For some reason, this method doesn't work on Mathematica 10.0.1! $\endgroup$ – Mahdi Mar 17 '15 at 22:57
  • $\begingroup$ @Mahdi It works for me. $\endgroup$ – halirutan Mar 17 '15 at 23:05
  • $\begingroup$ @halirutan: Probably related to this. I'm getting Axes::axes: "{{False,False},{False,False}} is not a valid axis specification. " and Ticks::ticks: "{Automatic,Automatic} is not a valid tick specification." using under Linux 64-bit. $\endgroup$ – Mahdi Mar 17 '15 at 23:12
12
$\begingroup$

You mean something like this?

p1 = Plot[Sin[x], {x, 0, 2 π}];
p2 = Plot[Sin[x], {x, 0, π}];

Show[Graphics[{Rectangle[{0, 0}, {1, 1}, p1], 
  Rectangle[{0.7, 0.4}, {1, 1}, p2]}]]

enter image description here

$\endgroup$
  • $\begingroup$ This was how it was done before Inset[] came along... $\endgroup$ – J. M. is away Nov 14 '12 at 9:56
  • $\begingroup$ @J.M. Ha, it means that it is a long time that I didn't have the need to do something like this. $\endgroup$ – VLC Nov 14 '12 at 9:57
  • 2
    $\begingroup$ (+1) very nice. I don't think i have seen this syntax before; any references? $\endgroup$ – kglr Nov 14 '12 at 10:02
  • 1
    $\begingroup$ @kguler, it was documented in old versions; apparently, when Inset[] became available in version 6, that piece of syntax was quietly redacted. $\endgroup$ – J. M. is away Nov 14 '12 at 10:28
  • $\begingroup$ @J.M. thank you. $\endgroup$ – kglr Nov 14 '12 at 10:32
9
$\begingroup$

In addition to Inset etc., you can do this manually with the 2D Graphics editing tools.

First producing plots as halirutan did:

p1 = Plot[Sin[x], {x, 0, 2 π}]
p2 = Plot[Sin[x], {x, 0, π}]

Mathematica graphics

Click the first one to select it (orange border):

Mathematica graphics

Then Copy or Cut the object.

Next, double-click the second graphic to enter editing mode (gray border):

Mathematica graphics

And Paste the first graphic:

Mathematica graphics

You can then position and resize the inset graphic using the orange frame.
When you are done just click outside of the main gray frame.

$\endgroup$
  • $\begingroup$ Even easier, thanks a lot! $\endgroup$ – pablo Nov 14 '12 at 11:25
  • $\begingroup$ This is a good solution, but in the end I would like to have a code from where I can re-run if I want those specifications again. Any simple way of retrieving that information? $\endgroup$ – Jorge Leitão Dec 27 '12 at 13:37
  • $\begingroup$ @J.C.Leitão Sorry, I never saw your comment. I can't think of anything practical but that could be a good question; why don't you post it? (If you haven't done so already in the long time since you asked this.) $\endgroup$ – Mr.Wizard Aug 14 '13 at 22:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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