# Make Show render axes and relevant scale when displaying sub-region?

Let's say I have two plots I want to Show on top of each other. However, I am only interested in a certain sub-region:

myplots = {Plot[x, {x, 0, 15}], Plot[1/10 x^2, {x, 0, 15}]};
Show[myplots, PlotRange -> {{2, 4}, All}]


1) The y axis and numbers are not displayed.

2) The y axis scale is not adjusted to display only the relevant region where the curves can be seen.

How to fix these issues?

PS: Note that I do want to display the entire region in myplots and then focus to sub-region in Show, since the plots I actually am interested in looking at take much longer to render. So having pre-rendered them completely and then selecting sub-regions in Show is a feature I'd like to keep.

• You can fix the y-axis by specifying AxesOrigin -> Automatic or using FrameTicks and related options. Sep 16, 2017 at 19:46

The following works for your simple example. In general, you might need to adapt it a bit.

cropData[g_Graphics] :=
With[
{range = PlotRange /. Quiet@AbsoluteOptions[g]},
g
/. c_GraphicsComplex :> Normal@c
/. (p : Line | Point)[pts_] :>
With[
{pos = Position[
pts,
pt : {_, _} /; And @@ MapThread[Between, {pt, range}],
{1}
][[All, 1]]
},
p[pts[[Max[Min@pos - 1, 1] ;; Min[Max@pos + 1, Length@pts]]]
]
]
]


It is used as

myplots = {Plot[{x}, {x, 0, 15}], Plot[1/10 x^2, {x, 0, 15}]};
cropData@Show[myplots, PlotRange -> {{2, 4}, Automatic}, AxesOrigin -> Automatic]


As noted in the comments, you can use AxesOrigin -> Automatic to reset the axes so that they are visible in your plot.

## How it works

The general idea is pretty straightforward:

• Get the plotrange (using Quiet, as AbsoluteOptions sometimes complains for certain tick specifications, but we don't care about that)
• Normalize all GraphicsComplexes (I'm not sure for which types of plots they are used - probably just for contour plots and similar, but this shouldn't hurt anyways)
• Search all Line/Point primitives and filter out any point that's not inside the PlotRange. We keep one point on either side to make sure the lines go right to the edge.
• Removing the hidden points from the plot causes the PlotRange specification to work as expected and zooms in on the y-axis