Note
Click here to download the full example code
Text Rotation ModeΒΆ
This example illustrates the effect of rotation_mode
on the positioning
of rotated text.
Rotated Text
s are created by passing the parameter rotation
to
the constructor or the axes' method text
.
The actual positioning depends on the additional parameters
horizontalalignment
, verticalalignment
and rotation_mode
.
rotation_mode
determines the order of rotation and alignment:
rotation_mode='default'
(or None) first rotates the text and then aligns the bounding box of the rotated text.rotation_mode='anchor'
aligns the unrotated text and then rotates the text around the point of alignment.
import matplotlib.pyplot as plt
import numpy as np
def test_rotation_mode(fig, mode, subplot_location):
ha_list = ["left", "center", "right"]
va_list = ["top", "center", "baseline", "bottom"]
axs = np.empty((len(va_list), len(ha_list)), object)
gs = subplot_location.subgridspec(*axs.shape, hspace=0, wspace=0)
axs[0, 0] = fig.add_subplot(gs[0, 0])
for i in range(len(va_list)):
for j in range(len(ha_list)):
if (i, j) == (0, 0):
continue # Already set.
axs[i, j] = fig.add_subplot(
gs[i, j], sharex=axs[0, 0], sharey=axs[0, 0])
for ax in axs.flat:
ax.set(aspect=1)
# labels and title
for ha, ax in zip(ha_list, axs[-1, :]):
ax.set_xlabel(ha)
for va, ax in zip(va_list, axs[:, 0]):
ax.set_ylabel(va)
axs[0, 1].set_title(f"rotation_mode='{mode}'", size="large")
kw = (
{} if mode == "default" else
{"bbox": dict(boxstyle="square,pad=0.", ec="none", fc="C1", alpha=0.3)}
)
# use a different text alignment in each axes
for i, va in enumerate(va_list):
for j, ha in enumerate(ha_list):
ax = axs[i, j]
# prepare axes layout
ax.set(xticks=[], yticks=[])
ax.axvline(0.5, color="skyblue", zorder=0)
ax.axhline(0.5, color="skyblue", zorder=0)
ax.plot(0.5, 0.5, color="C0", marker="o", zorder=1)
# add text with rotation and alignment settings
tx = ax.text(0.5, 0.5, "Tpg",
size="x-large", rotation=40,
horizontalalignment=ha, verticalalignment=va,
rotation_mode=mode, **kw)
if mode == "default":
# highlight bbox
fig.canvas.draw()
for ax in axs.flat:
text, = ax.texts
bb = text.get_window_extent().transformed(ax.transData.inverted())
rect = plt.Rectangle((bb.x0, bb.y0), bb.width, bb.height,
facecolor="C1", alpha=0.3, zorder=2)
ax.add_patch(rect)
fig = plt.figure(figsize=(8, 5))
gs = fig.add_gridspec(1, 2)
test_rotation_mode(fig, "default", gs[0])
test_rotation_mode(fig, "anchor", gs[1])
plt.show()
References
The use of the following functions, methods, classes and modules is shown in this example:
Total running time of the script: ( 0 minutes 1.017 seconds)
Keywords: matplotlib code example, codex, python plot, pyplot Gallery generated by Sphinx-Gallery