如何在matplotlib中将轴标签对齐到右侧或顶部?

ktca8awb  于 2023-10-24  发布在  其他
关注(0)|答案(3)|浏览(198)

默认情况下,matplotlib在轴的中心绘制轴标签。我想移动标签,使其与轴的末端对齐,无论是水平轴还是垂直轴。例如,对于水平轴,我想看到:

+--------------------+
|                    |
|                    |
|                    |
|                    |
|                    |
+--------------------+
                 label

是否可以在matplotlib的全局设置下实现?

zengzsys

zengzsys1#

更新

当前2023年的Matplotlib有一个新的关键字loc=…,用于plt.[xy]label
来自xlabel文档字符串
loc : {'left', 'center', 'right'},
The label position. This is a high-level alternative for passing
parameters *x* and *horizontalalignment*.
你可以简单地写

plt.xlabel('x_description', loc='right')
plt.ylabel('y_description', loc='top')

我的另一个答案仍然是一个很好的答案,因为获取一个对象,修改它并设置它本身就是一个好主意,但这里它是一个替代的,更干净的解决方案:

...
plt.xlabel('x_description', horizontalalignment='right', x=1.0)
plt.ylabel('y_description', horizontalalignment='right', y=1.0)
...

正如你所看到的,没有更多的魔术数字,并适用于xlabelylabel
请注意,在这两种情况下,我们都将更改水平对齐方式,当我第一次更改ylabel中的垂直对齐方式时,我最终清楚了原因。

hof1towb

hof1towb2#

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

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

|

|

|
| --|--|

e5njpo68

e5njpo683#

一个特别的解决方案,它引入了一个神奇的值25,我不太理解,至少可以说,是

plt.xlabel('pollo', horizontalalignment='right', position=(1,25))

一个更明智的方法是使用axes.xaxis选择的任何y位置.
1.使用父容器的.get_object(...)方法获取对象
1.修改对象
1.使用父对象的.set_object(...)方法更新它
在我们的例子中,我们做了一个图,然后我们得到了当前轴ax,它包含了xaxisxaxis包含了我们想要修改其位置和对齐的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()

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

相关问题