|
1 | 1 | """ |
2 | | -============= |
3 | | -Align Ylabels |
4 | | -============= |
| 2 | +============== |
| 3 | +Align y-labels |
| 4 | +============== |
| 5 | +
|
| 6 | +Two methods are shown here, one using a short call to `.Figure.align_ylabels` |
| 7 | +and the second a manual way to align the labels. |
5 | 8 |
|
6 | | -Align the axis labels between subplots. |
7 | 9 | """ |
8 | 10 | import numpy as np |
9 | 11 | import matplotlib.pyplot as plt |
10 | 12 |
|
11 | | -box = dict(facecolor='yellow', pad=5, alpha=0.2) |
| 13 | +def make_plot(axs): |
| 14 | + box = dict(facecolor='yellow', pad=5, alpha=0.2) |
| 15 | + |
| 16 | + # Fixing random state for reproducibility |
| 17 | + np.random.seed(19680801) |
| 18 | + ax1 = axs[0, 0] |
| 19 | + ax1.plot(2000*np.random.rand(10)) |
| 20 | + ax1.set_title('ylabels not aligned') |
| 21 | + ax1.set_ylabel('misaligned 1', bbox=box) |
| 22 | + ax1.set_ylim(0, 2000) |
| 23 | + |
| 24 | + ax3 = axs[1, 0] |
| 25 | + ax3.set_ylabel('misaligned 2',bbox=box) |
| 26 | + ax3.plot(np.random.rand(10)) |
| 27 | + |
| 28 | + ax2 = axs[0, 1] |
| 29 | + ax2.set_title('ylabels aligned') |
| 30 | + ax2.plot(2000*np.random.rand(10)) |
| 31 | + ax2.set_ylabel('aligned 1', bbox=box) |
| 32 | + ax2.set_ylim(0, 2000) |
12 | 33 |
|
13 | | -fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) |
| 34 | + ax4 = axs[1, 1] |
| 35 | + ax4.plot(np.random.rand(10)) |
| 36 | + ax4.set_ylabel('aligned 2', bbox=box) |
| 37 | + |
| 38 | +# Plot 1: |
| 39 | + |
| 40 | +fig, axs = plt.subplots(2, 2) |
14 | 41 | fig.subplots_adjust(left=0.2, wspace=0.6) |
| 42 | +make_plot(axs) |
| 43 | + |
| 44 | +# just align the last column of axes: |
| 45 | +fig.align_ylabels(axs[:,1]) |
| 46 | +plt.show() |
15 | 47 |
|
16 | | -# Fixing random state for reproducibility |
17 | | -np.random.seed(19680801) |
| 48 | +############################################################################# |
| 49 | +# |
| 50 | +# .. seealso:: |
| 51 | +# `.Figure.align_ylabels` and `.Figure.align_labels` for a direct method |
| 52 | +# of doing the same thing. |
| 53 | +# Also :doc:`/gallery/subplots_axes_and_figures/align_labels_demo` |
| 54 | +# |
| 55 | +# |
| 56 | +# Or we can manually align the axis labels between subplots manually using the |
| 57 | +# `set_label_coords` method of the y-axis object. Note this requires we know |
| 58 | +# a good offset value which is hardcoded. |
18 | 59 |
|
19 | | -ax1.plot(2000*np.random.rand(10)) |
20 | | -ax1.set_title('ylabels not aligned') |
21 | | -ax1.set_ylabel('misaligned 1', bbox=box) |
22 | | -ax1.set_ylim(0, 2000) |
| 60 | +fig, axs = plt.subplots(2, 2) |
| 61 | +fig.subplots_adjust(left=0.2, wspace=0.6) |
23 | 62 |
|
24 | | -ax3.set_ylabel('misaligned 2',bbox=box) |
25 | | -ax3.plot(np.random.rand(10)) |
| 63 | +make_plot(axs) |
26 | 64 |
|
27 | 65 | labelx = -0.3 # axes coords |
28 | 66 |
|
29 | | -ax2.set_title('ylabels aligned') |
30 | | -ax2.plot(2000*np.random.rand(10)) |
31 | | -ax2.set_ylabel('aligned 1', bbox=box) |
32 | | -ax2.yaxis.set_label_coords(labelx, 0.5) |
33 | | -ax2.set_ylim(0, 2000) |
34 | | - |
35 | | -ax4.plot(np.random.rand(10)) |
36 | | -ax4.set_ylabel('aligned 2', bbox=box) |
37 | | -ax4.yaxis.set_label_coords(labelx, 0.5) |
| 67 | +for j in range(2): |
| 68 | + axs[j, 1].yaxis.set_label_coords(labelx, 0.5) |
38 | 69 |
|
39 | 70 | plt.show() |
40 | 71 |
|
|
49 | 80 | # in this example: |
50 | 81 |
|
51 | 82 | import matplotlib |
| 83 | +matplotlib.figure.Figure.align_ylabels |
52 | 84 | matplotlib.axis.Axis.set_label_coords |
53 | 85 | matplotlib.axes.Axes.plot |
54 | 86 | matplotlib.pyplot.plot |
|
0 commit comments