如何将轴标签对齐到右侧

Rug*_*rra 7 matplotlib

默认情况下,matplotlib将轴标签绘制在轴的中心.我想以这样的方式移动标签,使其与轴的末端对齐,包括水平轴和垂直轴.例如对于水平轴我想看到:

+--------------------+
|                    |
|                    |
|                    |
|                    |
|                    |
+--------------------+
                 label
Run Code Online (Sandbox Code Playgroud)

是否可以使用matplotlib的全局设置来完成它?

gbo*_*ffi 18

好的,我会单独留下我的其他答案(1),但这是好的

...
plt.xlabel('x_description', horizontalalignment='right', x=1.0)
plt.ylabel('y_description', horizontalalignment='right', y=1.0)
...
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,没有更多神奇的数字,并且适用于xlabelylabel.

请注意,在这两种情况下,我们都要更改水平对齐,原因是我在第一次更改垂直对齐时最终清楚了ylabel...


(1)因为获取对象,修改该对象并将其设置回来的想法本身就是一个好主意,不是吗?


gbo*_*ffi 7

一个临时解决方案,它引入了25我不太了解的魔法值,至少可以说是

plt.xlabel('pollo', horizontalalignment='right', position=(1,25))
Run Code Online (Sandbox Code Playgroud)

更明智的方法是使用选择的任何y位置axes.xaxis......考虑到这个想法,一个理智的程序通常就像

  1. 使用.get_object(...)父容器的方法获取对象
  2. 修改对象
  3. 使用其.set_object(...)方法更新父级

在我们的例子中,我们做的情节,那么我们得到的当前轴ax包含xaxis包含label其位置和排列,我们要修改。

...
plt.xlabel('...')
...
ax = plt.gca()
label = ax.xaxis.get_label()
x_lab_pos, y_lab_pos = label.get_position()
label.set_position([1.0, y_lab_pos])
label.set_horizontalalignment('right')
ax.xaxis.set_label(label)
...
plt.show()
Run Code Online (Sandbox Code Playgroud)

关于直接作用于matplotlib的默认值,我浏览了plt.rcParams数据结构,但没有发现任何有用的东西。当然,这并不意味着这是不可能的,只是我看不到可行的解决方案。

  • 我想知道是否可以通过 matplotlib 的全局设置来做到这一点 (2认同)

uke*_*emi 5

v3.3 开始,您现在可以使用andloc参数设置这些:set_xlabelset_ylabel

import matplotlib.pyplot as plt

# Left plot
options = ['left', 'center', 'right']
fig, axs = plt.subplots(len(options), 1, constrained_layout=True)

for ax, loc in zip(axs, options):
    ax.plot([1, 2, 3])
    ax.set_xlabel(f'xlabel loc={loc!r}', loc=loc)
Run Code Online (Sandbox Code Playgroud)
# Right plot
options = ['bottom', 'center', 'top']
fig, axs = plt.subplots(1, len(options), constrained_layout=True)

for ax, loc in zip(axs, options):
    ax.plot([1, 2, 3])
    ax.set_ylabel(f'ylabel loc={loc!r}', loc=loc)
Run Code Online (Sandbox Code Playgroud)
在此处输入图片说明 在此处输入图片说明