Skip to content

Doc: spines arrows example #17180

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions examples/axisartist/demo_axisline_style.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
================

This example shows some configurations for axis style.

Note: The `mpl_toolkits.axisartist` axes classes may be confusing for new
users. If the only aim is to obtain arrow heads at the ends of the axes,
rather check out the :doc:`/gallery/recipes/centered_spines_with_arrows`
example.
"""

from mpl_toolkits.axisartist.axislines import SubplotZero
Expand Down
35 changes: 35 additions & 0 deletions examples/recipes/centered_spines_with_arrows.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""
===========================
Centered spines with arrows
===========================

This example shows a way to draw a "math textbook" style plot, where the
spines ("axes lines") are drawn at ``x = 0`` and ``y = 0``, and have arrows at
their ends.
"""

import matplotlib.pyplot as plt
import numpy as np


fig, ax = plt.subplots()
# Move the left and bottom spines to x = 0 and y = 0, respectively.
ax.spines["left"].set_position(("data", 0))
ax.spines["bottom"].set_position(("data", 0))
# Hide the top and right spines.
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)

# Draw arrows (as black triangles: ">k"/"^k") at the end of the axes. In each
# case, one of the coordinates (0) is a data coordinate (i.e., y = 0 or x = 0,
# respectively) and the other one (1) is an axes coordinate (i.e., at the very
# right/top of the axes). Also, disable clipping (clip_on=False) as the marker
# actually spills out of the axes.
ax.plot(1, 0, ">k", transform=ax.get_yaxis_transform(), clip_on=False)
ax.plot(0, 1, "^k", transform=ax.get_xaxis_transform(), clip_on=False)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does something like this add arrows on the other ends of the axes, as well? (For when axes are lines instead of only rays)

ax.plot(0, 0, "<k", transform=ax.get_yaxis_transform(), clip_on=False)
ax.plot(0, 0, "vk", transform=ax.get_xaxis_transform(), clip_on=False)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

... Aesthetically, arrows on both ends of each axis are probably what most math teachers are looking for


# Some sample data.
x = np.linspace(-0.5, 1., 100)
ax.plot(x, np.sin(x*np.pi))

plt.show()
3 changes: 3 additions & 0 deletions examples/ticks_and_spines/spine_placement_demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
====================

Adjusting the location and appearance of axis spines.

Note: If you want to obtain arrow heads at the ends of the axes, also check
out the :doc:`/gallery/recipes/centered_spines_with_arrows` example.
"""
import numpy as np
import matplotlib.pyplot as plt
Expand Down