
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "gallery/text_labels_and_annotations/demo_text_rotation_mode.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. meta::
        :keywords: codex

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_gallery_text_labels_and_annotations_demo_text_rotation_mode.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_gallery_text_labels_and_annotations_demo_text_rotation_mode.py:


==================
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 `~.axes.Axes.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.

.. redirect-from:: /gallery/text_labels_and_annotations/text_rotation

.. GENERATED FROM PYTHON SOURCE LINES 23-81

.. code-block:: Python


    import matplotlib.pyplot as plt


    def test_rotation_mode(fig, mode):
        ha_list = ["left", "center", "right"]
        va_list = ["top", "center", "baseline", "bottom"]
        axs = fig.subplots(len(va_list), len(ha_list), sharex=True, sharey=True,
                           subplot_kw=dict(aspect=1),
                           gridspec_kw=dict(hspace=0, wspace=0))

        # 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)}
        )

        texts = {}

        # 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)
                texts[ax] = tx

        if mode == "default":
            # highlight bbox
            fig.canvas.draw()
            for ax, text in texts.items():
                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))
    subfigs = fig.subfigures(1, 2)
    test_rotation_mode(subfigs[0], "default")
    test_rotation_mode(subfigs[1], "anchor")
    plt.show()





.. image-sg:: /gallery/text_labels_and_annotations/images/sphx_glr_demo_text_rotation_mode_001.png
   :alt: rotation_mode='default', rotation_mode='anchor'
   :srcset: /gallery/text_labels_and_annotations/images/sphx_glr_demo_text_rotation_mode_001.png, /gallery/text_labels_and_annotations/images/sphx_glr_demo_text_rotation_mode_001_2_00x.png 2.00x
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 82-88

.. admonition:: References

   The use of the following functions, methods, classes and modules is shown
   in this example:

   - `matplotlib.axes.Axes.text` / `matplotlib.pyplot.text`


.. _sphx_glr_download_gallery_text_labels_and_annotations_demo_text_rotation_mode.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: demo_text_rotation_mode.ipynb <demo_text_rotation_mode.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: demo_text_rotation_mode.py <demo_text_rotation_mode.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: demo_text_rotation_mode.zip <demo_text_rotation_mode.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
