I have a collection of plots, all of which have the same horizontal-axis range, but different vertical-axis ranges. These ranges differ not only in the absolute locations of their maxima (ymax
) and minima (ymin
), but also in the differences between these limits (ymax - ymin
).
To make the plots immediately comparable, it is important that they all their vertical axes be scaled equally. By this I mean that the on-screen distance corresponding to a given vertical-axis interval is the same for all the plots. For example, if the vertical ranges for two plots are 80-110 and 150-200, all I require is that the on-screen distance between the vertical coordinates 100 and 90 (for example) in the first plot be the same as the on-screen distance between the vertical coordinates 155 and 145 (for example) in the second plot.
Is there a simple way to fix the scaling of the vertical axis?
When I have encountered this sort of trouble in the past, I have managed to get around it by using AspectRatio->Automatic
, but in this case this idea does not work, because the desired transformation is one that should affect only the vertical dimension, while specifying AspectRatio->Automatic
would normally affect both the height and the width.
EDIT (clarifications):
First, I apologize for not showing examples. I realize that it is somewhat irritating to read about graphics in the abstract. Unfortunately, the data I'm working with, and even the details of its representation, are proprietary (and not mine!).
The fundamental issue here is that there is no "natural origin" for the axes of the plots in question. The basic information being communicated through these plots would be the same if one redefined the origin for either axis (or for both)1. (The plots live in an "affine space", if you like.) More specifically, at the coarsest level, the information conveyed by these plots is mostly entirely visual, and is either in the form of areas (under curves) or in the form of slopes (of piecewise-linear curves). Furthermore, what matters are not the numeric values of these areas and slopes, but rather their comparison across several plots. For such comparison it is therefore essential that the scaling (the "choice of units", as it were) be the same for all the plots being compared.
Therefore, the ideal solution to this problem would be a way for me to specify, for each plot, the scaling for the vertical axis, and let Mathematica calculate everything else. I can't stress this last point enough: I want to keep to a minimum the number of parameters I need to set in order to achieve consistency of vertical-axis scaling. (That said, if it turns out that the vertical axis scaling can be specified only in conjunction with the specification of the horizontal axis scaling, as long as the two scalings are allowed to be different, then this would be fine too. In fact, this would be the most "correct" solution to the general problem of making multiple comparable plots of data living in the same 2D affine space.)
As it happens, for any collection of cases to be compared, the ranges of the horizontal axes always have the same extent2, and this somewhat fortuitous situation tends to keep the scaling of the horizontal axis sufficiently constant for my purposes. Hence, my interest in controlling the scaling of only the vertical axis is the result of this fortuitous situation.
Regarding the question of whether the plots will be displayed on a grid, the short, but somewhat inaccurate, answer would be "no". These plots are useful mostly for displaying fairly striking contrasts between various cases. This means that, as long as their scaling is controlled, they can communicate effectively even when they are not displayed side-by-side. (In other words, as long as "long-and-skinny" and "short-and-fat" represent real differences in the data being portrayed, rather than artifacts of scaling, then a comparison between a plot showing a "long-and-skinny" blob with another one two pages earlier showing some "short-and-fat" blob would still easily get the point across.)
Assuming the scaling is kept consistent, then the contrasts between the plots are, for the most part, pretty blatant. This means the benefit of a side-by-side display of these plots (e.g. in a grid) is relatively minor.
In my original post I mentioned my use of AspectRatio->Automatic
to deal with analogous problems in the past, and noted this solution is not suitable in this case. Let me be more precise. Using AspectRatio
to control scaling is reasonable enough when the aspect ratio of the data being presented really does matter (e.g. so that circles don't get displayed as ellipses, etc.), but in the past I've used it, in a pinch, to control scaling even in cases in which the aspect ratio information in the data is not important. A hack, in other words. As it happens, the plots I'm working with is one where the aspect ratio information is not very important3. In fact, the vertical and horizontal axes in these plots are entirely incommensurable.
1This is a slight overstatement. It would be more accurate to say that the information conveyed by the locations of these origins relative to the data being displayed is very secondary, although it is not entirely (ahem) zero, and this is the only reason for not redefining the horizontal-axis origin for all the plots to coincide with, say, the leftmost edge of the PlotRange
. That said, most of the story we want to tell with these plots would still come across does not depend on the information contained in the axes.
2The relative position of the horizontal-axis origins may differ from one plot to the next, but, as stated earlier, the locations of these origins is not very significant.
3To be more precise all possible aspect ratios within a rather broad range are equally acceptable. Clearly, once aspect ratios become sufficiently extreme, all the information conveyed through slopes and areas gets essentially squashed away.
AspectRatio->Automatic
would normally affect both the height and the width." Have you tried additionally specifying a width usingImageSize
? $\endgroup$RandomReal
if you do not want to use someone's data. I have read it once and I do not know why Mr. Wizard's and Jens's remarks are not enough for you. Maybe I have missed something but I will not read it second time. $\endgroup$