What is the simplest way to create a row/column/grid of plots, with the whole grid having a single FrameLabel?
I need something similar to this:
p := ListPlot[RandomInteger[10, 5], Joined -> True, Axes -> False,
Frame -> True, PlotRange -> {0, 11},
FrameLabel -> {"horizontal", None}, AspectRatio -> 1]
GraphicsRow[{Show[p, FrameLabel -> {"horizontal", "vertical"}], p, p}]
For a row format, it could have one or multiple horizontal labels, but only one vertical one.
Issues to consider:
- Vertical scale must match for all plots, and must not be ruined by e.g. a too long label or automatic
PlotRangePadding
. - Good (and resize-tolerant!) control of inter-plot spacing is needed (after all, this is one of the motivations behind removing the redundant labels)
- General space-efficiency of the arrangement. Maximum content, minimum (unnecessary) whitespace.
EDIT
I'm trying to be able to robustly create print ready figures, which involves a lot of resizing. (Because the exported PDFs will usually not have the same proportions as what I see in the notebook, and must have readable but not oversized fonts)
Here is one option I just put together. Its advantage is that it is simple.
I like the look of yoda's LevelScheme plots better, assuming those can be done for a grid as well.
You can use LevelScheme to achieve what you want. Here's an example:
LevelScheme offers you tremendous flexibility in the arrangement of your plot.
FigurePanel[]
and control the labels for each one individually.The only drawback is that you might have to wrestle with it in some cases, but in general, I've found it a pleasure to use.
EDIT
Here's one similar to your example:
EDIT 2
To answer Mr. Wizard's comment, here's a blank template for a
2x3
gridAnd here's one with extended panels
You already know how to handle multiple horizontal labels through
ListPlot
. You can get single labels by usingPanel
. For example...You can optionally include labels on
Top
andRight
edges too.