在matplotlib中自定义辅助yaxis上的YLabel,以使用逗号格式化为千

2024-10-03 04:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

在matplotlib中,我很难在次y轴上设置记号标签的格式,我希望将次y轴标签的格式设置为包含逗号,以分隔数千个(例如20000个而不是20000个)。当使用单个y轴时,我通常只使用:

ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))

这正是我想要的。然而,每当我尝试在一个带有第二个y轴的绘图上做同样的事情时,这根本不起作用,实际上它什么都不起作用

示例(数字/上下文是没有意义的,只是显示一个最小的工作示例):

import matplotlib.pyplot as plt, matplotlib as mpl, numpy as np

y = [k for k in range(240)]

def CtoF(x):
    return (x * 1.8 + 32) + 10000


def FtoC(x):
    return (x - 32) / 1.8

temperature = np.random.randn(len(y))
fig, ax = plt.subplots(constrained_layout=True, figsize=(10,5))

ax.plot(y, temperature)
ax.set_ylabel(r'$T\ [^oC]$')

secaxy = ax.secondary_yaxis('right', functions=(CtoF, FtoC))
secaxy.set_ylabel(r'$T\ [^oF]$ + 10000')
secaxy.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))

plt.show()

上述代码不会像应用于仅具有单个y轴的绘图时通常那样更改次y轴上的标签,它完全不做任何操作,只保留相同的标签

我尝试过的其他一些方法也不起作用,分别获取Ytick,然后手动设置标签,如下所示:

vals = secaxy.get_yticks()
secaxy.set_yticklabels(['{:,}'.format(x) for x in vals])

这也不会对次y轴标签产生任何影响

如果您能为我提供帮助,我将不胜感激


Tags: formatgetmatplotlibformatteras格式plt标签