设置xlabel时,x参数以轴为单位分配位置,因此0是原点,1是图的右边缘。 y被忽略,因为它预计是一个默认值,就在刻度线之下。
要覆盖此行为,您可以使用Axis set_label_coords method以轴为单位设置位置。您还可以通过提供变换来使用其他单位。
这是一个例子:
import matplotlib.pyplot as plt
import numpy as np
ax = plt.gca()
ax.set_xticks(np.arange(0,6,1))
label = ax.set_xlabel('Xlabel', fontsize = 9)
ax.xaxis.set_label_coords(1.05, -0.025)
plt.savefig('labelAtEnd.png')
plt.show()
导致:
选择x值(1.05)将标签定位在轴框架外。选择y值(-0.025)作为您想要的位置的最佳猜测。使用变换,可能会自动将文本放置在与Tick标签一致的位置。
编辑:
以下是使用变换的扩展示例。使用最后一个ticklabel的变换不是很有帮助,因为它不考虑文本的大小以及它的对齐方式。所以为了得到一个有点想要的效果,我不得不1)使用相同的字体大小为我的x标签,2)将垂直对齐(va)定位到“顶”,并且3)将水平对齐定位到“左”。每个刻度的变换针对x(因为它是x轴)的数据单位和y(0到1)的轴单位设置,但是从x轴移位固定的填充(以像素为单位)。
import matplotlib.pyplot as plt
import numpy as np
ax = plt.gca()
ax.set_xticks(np.arange(0,6,1))
ax.set_yticks(np.arange(0,6,1))
label = ax.set_xlabel('xlabel', ha='left', va = 'top', )#fontsize = 9)
# need to draw the figure first to position the tick labels
fig = plt.gcf()
fig.draw(fig.canvas.get_renderer())
# get a tick and will position things next to the last one
ticklab = ax.xaxis.get_ticklabels()[0]
trans = ticklab.get_transform()
ax.xaxis.set_label_coords(5.1, 0, transform=trans)
plt.savefig('labelAtEnd2.png')
plt.show()
这导致: