DoubleYAxis Context Manager¶
A double-y-axis plot is one where one dataset is plotted referenced to the y-axis on the left of the frame and a second dataset is plotted against the y-axis on the right-hand side of the frame. This works well when you want to show two different parameters that are dependent on the same independent variable.
The DoubleYAxis
context manager adjusts the current (or specified) set of axes and creates a second set
of axes that shares the same x-axis. By default, it will also set the matplotlib current axes to be the new second
y-axis within the context manager and restore the original current axes on exit.
It offers additional parameters to control the merging of legends between the two y-axes and to colour the y-axes separately to help identify which axis goes with which dataset:
with DoubleYAxis() as Y2:
Y2.plot(...)
This will create a new second y-axis on the right side of the current axes’ plot frame, replacing the original axes right ticks etc. After plotting using the Y2 axes, the context manager will create a legend for both original and second y-axis plots and look for the best place to put the combined legend.
Finally, on exit, the original axes are set to be the current axes.
Legend Control¶
There are two keyword parameters that affect the legend behaviour. legend is a boolean switch that, if set to False, ensures the context manager takes no action over the legends. If set to True, then at exit, the context manager will remove any existing legends from the two y-axes and create a new merged legend on the original (left) axes.
The location of the new legend can be controlled with the loc parameter. By default, this has the value “best”. In this case, a slightly modified version of the usual matplotlib automatic placement algorithm is run. The main difference is that the contents of both sets of axes are considered in determining the best location.
Colouring the Axes¶
The colours parameter is used to set the colour of the two y-axis spines, tick labels, and axis labels. It can either be a comma-separated string of two named colours, or a 2-element list or tuple of colours for left and right axes. If only one element is supplied, it is assumed to be the colour of the right-hand axes. Values of None signal that the axis is not to be coloured.
Other Parameters¶
The ax keyword parameter sets the parent axes to create the second y-axis on. The default None signals that the current axes should be used.
The switch_to_y2 parameter controls whether the current axes are set to the new second y-axis within the context manager. The default, True, switches the current axes over for the duration of the context manager. This avoids the need to explicitly use the context manager’s variable.
Example¶
This illustrates the use of the DoubleYAxis
in conjunction with the SavedFigure
context
manager:
with SavedFigure("fig7d.png", style="stoner,med-res"):
fig, ax = plt.subplots()
# Do First (left-hand y-axis) plot.
for p in [10, 20, 50]:
ax.plot(x, model(x, p), label=p, marker="")
ax.legend(title="Order", fontsize=6, ncols=2)
# Now do plotting of the second (right) y-axis.
with DoubleYAxis(colours="central,piccadilly"):
for p in [10, 20, 50]:
plt.plot(x, np.abs(model(x, p) - 0.5), "--", label=f"$|{p}|$")
plt.ylabel("2$^\\mathrm{nd}$ Harmonic")