通常,要更改轴的(例如ax.xaxis
)标签位置,您会执行axis.label.set_position(xy)
. 或者你可以只设置一个坐标,例如'ax.xaxis.set_x(1)`。
在您的情况下,它将是:
ax['xzero'].label.set_x(1)
ax['yzero'].label.set_y(1)
但是, (以及or中的axislines
任何其他内容)是一个有点过时的模块(这就是存在的原因)。在某些情况下,它不能正确地对事物进行子类化。因此,当我们尝试设置标签的 x 和 y 位置时,没有任何变化!axisartist
axes_grid
axes_grid1
一个快速的解决方法是使用ax.annotate
在箭头末端放置标签。但是,让我们先尝试以不同的方式制作情节(之后我们无论如何都会回来annotate
)。
这些天来,您最好使用新的脊椎功能来完成您想要完成的事情。
将 x 和 y 轴设置为“归零”很简单:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
for spine in ['left', 'bottom']:
ax.spines[spine].set_position('zero')
# Hide the other spines...
for spine in ['right', 'top']:
ax.spines[spine].set_color('none')
ax.axis([-4, 10, -4, 10])
ax.grid()
plt.show()
但是,我们仍然需要漂亮的箭头装饰。这有点复杂,但它只是用适当的参数进行注释的两次调用。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
#-- Set axis spines at 0
for spine in ['left', 'bottom']:
ax.spines[spine].set_position('zero')
# Hide the other spines...
for spine in ['right', 'top']:
ax.spines[spine].set_color('none')
#-- Decorate the spins
arrow_length = 20 # In points
# X-axis arrow
ax.annotate('', xy=(1, 0), xycoords=('axes fraction', 'data'),
xytext=(arrow_length, 0), textcoords='offset points',
arrowprops=dict(arrowstyle='<|-', fc='black'))
# Y-axis arrow
ax.annotate('', xy=(0, 1), xycoords=('data', 'axes fraction'),
xytext=(0, arrow_length), textcoords='offset points',
arrowprops=dict(arrowstyle='<|-', fc='black'))
#-- Plot
ax.axis([-4, 10, -4, 10])
ax.grid()
plt.show()
(箭头的宽度由文本大小(或 的可选参数arrowprops
)控制,因此如果您愿意,指定类似size=16
toannotate
会使箭头更宽一些。)
此时,最简单的方法是添加“X”和“Y”标签作为注释的一部分,尽管设置它们的位置也可以。
如果我们只是传入一个标签作为注释的第一个参数而不是一个空字符串(并稍微改变对齐方式),我们将在箭头末端得到漂亮的标签:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
#-- Set axis spines at 0
for spine in ['left', 'bottom']:
ax.spines[spine].set_position('zero')
# Hide the other spines...
for spine in ['right', 'top']:
ax.spines[spine].set_color('none')
#-- Decorate the spins
arrow_length = 20 # In points
# X-axis arrow
ax.annotate('X', xy=(1, 0), xycoords=('axes fraction', 'data'),
xytext=(arrow_length, 0), textcoords='offset points',
ha='left', va='center',
arrowprops=dict(arrowstyle='<|-', fc='black'))
# Y-axis arrow
ax.annotate('Y', xy=(0, 1), xycoords=('data', 'axes fraction'),
xytext=(0, arrow_length), textcoords='offset points',
ha='center', va='bottom',
arrowprops=dict(arrowstyle='<|-', fc='black'))
#-- Plot
ax.axis([-4, 10, -4, 10])
ax.grid()
plt.show()
只需一点点工作(直接访问脊椎的变换),您就可以概括使用注释来处理任何类型的脊椎对齐(例如“掉落”的脊椎等)。
无论如何,希望能有所帮助。如果你愿意,你也可以用它变得更漂亮。