在 matplotlib 中自定义次要 y 轴上的 y 标签以使用逗号格式化为千位
Customising y-labels on a secondary y-axis in matplotlib to format to thousands with a comma
我在 matplotlib 的次要 y 轴上格式化刻度标签时遇到困难,我希望将次要 y 轴标签格式化为包含逗号以分隔千位(例如 20,000 而不是 20000)。使用单个 y 轴时,我通常只使用:
ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
这完全符合我的预期。但是,每当我尝试在带有辅助 y 轴的图上做同样的事情时,这根本行不通,实际上它什么也没做。
示例(numbers/context 没有意义,只是为了展示一个最小的工作示例):
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 轴的图时所做的那样,它什么都不做,只是让标签保持不变.
我尝试过的其他一些也不起作用的方法是分别获取 yticks,然后手动设置标签,如下所示:
vals = secaxy.get_yticks()
secaxy.set_yticklabels(['{:,}'.format(x) for x in vals])
这对辅助 y 轴标签也没有任何作用。
如果能帮助我实现它,我将不胜感激?
pip install matplotlib==3.2.1
这应该可以解决您的问题。
我在 matplotlib 的次要 y 轴上格式化刻度标签时遇到困难,我希望将次要 y 轴标签格式化为包含逗号以分隔千位(例如 20,000 而不是 20000)。使用单个 y 轴时,我通常只使用:
ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
这完全符合我的预期。但是,每当我尝试在带有辅助 y 轴的图上做同样的事情时,这根本行不通,实际上它什么也没做。
示例(numbers/context 没有意义,只是为了展示一个最小的工作示例):
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 轴的图时所做的那样,它什么都不做,只是让标签保持不变.
我尝试过的其他一些也不起作用的方法是分别获取 yticks,然后手动设置标签,如下所示:
vals = secaxy.get_yticks()
secaxy.set_yticklabels(['{:,}'.format(x) for x in vals])
这对辅助 y 轴标签也没有任何作用。
如果能帮助我实现它,我将不胜感激?
pip install matplotlib==3.2.1
这应该可以解决您的问题。