11
$\begingroup$

I am trying to show a gradient field behind a plot, and then its density in a separate plot below.

I understand (as in this question) that this must normally be done using the ImagePadding directive. However, that does not quite align the plots in this case:

padding = {{20, 30}, {20, 30}}; 
GraphicsColumn[
  {
   Show[
    DensityPlot[PDF[NormalDistribution[0, 1], Log[x/40]] , 
      {x, 15, 60}, {y, 0, 30}, 
      ColorFunction -> "SunsetColors"], 
    Graphics[{Dashed, Gray, Line[{{40, 0}, {40, 30}}]}], 
    Plot[If[x < 20, 10, If[x < 25, 2 x - 30, 20]], {x, 15, 60}, 
      PlotRange -> {0, 30} , 
      PlotStyle -> {RGBColor[0.5, .7, 0.2], Thickness[0.01]}], 
    ImagePadding -> padding, PlotRangePadding -> None
   ], 
   Plot[PDF[NormalDistribution[0, 1], 5 Log[x/40]] , {x, 15, 60}, 
      PlotStyle -> {RGBColor[1, 0.4, 0], Thickness[0.01]},
      ImagePadding -> padding]
  }
]

Align me

Is there a way to get the abscissa ranges to match?

$\endgroup$
  • 1
    $\begingroup$ You also need to set PlotRange explicitly for both plots $\endgroup$ – Verbeia Apr 15 '12 at 21:20
  • 2
    $\begingroup$ You might also need to explicitly set the AxesOrigin option in the bottom plot. $\endgroup$ – Guillochon Apr 15 '12 at 21:24
  • 2
    $\begingroup$ To those tempted to close: I believe the issue is slightly different from earlier alignment questions. Please don't close. $\endgroup$ – Sjoerd C. de Vries Apr 15 '12 at 22:14
13
$\begingroup$

AbsoluteOptions shows there to be several differences between the output settings of the first and second plots:

Grid[Prepend[Transpose[
     AbsoluteOptions[#, {PlotRangePadding, AspectRatio, 
           Frame}] & /@ {plot1, plot2}], {"first", "second"}], Frame -> All]

settings

It'll look better if you use the same aspect ratio (I used 1/GoldenRatio) and a frame in each picture. I also set PlotRangePadding-> None in the second case.

plots

$\endgroup$
  • $\begingroup$ Your method of examining AbsoluteOptions is very generalizable. I think it's great. $\endgroup$ – Brian B Apr 16 '12 at 2:05
  • $\begingroup$ Thanks. It's probably still a good idea to first scan the output of AbsoluteOptions[plot1] and AbsoluteOptions[plot2] to identify the options you want to compare. $\endgroup$ – DavidC Apr 16 '12 at 12:21
4
$\begingroup$

Use for example Framed[]:

padding = {{20, 20}, {20, 20}};
GraphicsColumn[{
  Framed[Show[
    DensityPlot[
     PDF[NormalDistribution[0, 1], Log[x/40]], {x, 15, 60}, {y, 0, 
      30}, ColorFunction -> "SunsetColors"],
    Graphics[{Dashed, Gray, Line[{{40, 0}, {40, 30}}]}], 
    Plot[If[x < 20, 10, If[x < 25, 2 x - 30, 20]], {x, 15, 60}, 
     PlotRange -> {0, 30}, 
     PlotStyle -> {RGBColor[0.5, .7, 0.2], Thickness[0.01]}], 
    ImagePadding -> padding, PlotRangePadding -> None], 
   FrameStyle -> Directive[White]],
  Framed[Plot[
    PDF[NormalDistribution[0, 1], 5 Log[x/40]], {x, 15, 60}, 
    PlotStyle -> {RGBColor[1, 0.4, 0], Thickness[0.01]}, 
    ImagePadding -> padding, Frame -> True], 
   FrameStyle -> Directive[White]]}]

enter image description here

$\endgroup$
  • $\begingroup$ Nice, sneaky trick! $\endgroup$ – Brian B Apr 16 '12 at 2:04

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.