matplotlib: 更改y轴刻度标签

8 投票
2 回答
15150 浏览
提问于 2025-04-17 17:22

我想把y轴上的每个刻度标签改成这样:

标签 -> 2^标签

我在绘制对数-对数的数据(以2为底),但我希望标签能显示原始数据的值。

我知道可以用下面的代码获取当前的y轴标签:

ylabels = plt.getp(plt.gca(), 'yticklabels')

这会给我一个列表:<一个包含9个文本y刻度标签对象的列表>,每个对象都是一个 <matplotlib.text.Text对象,地址是0x...>

我查看了文本对象的文档,地址是 http://matplotlib.org/users/text_props.html,但我还是不确定怎么正确地修改每个文本标签里的内容。

一旦我修改了标签,就可以用下面的代码把它们设置到轴上:

plt.setp(plt.gca(), 'yticklabels', ylabels)

2 个回答

-1

根据这个链接 http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_yticks

你可以用下面的代码来设置图表的Y轴刻度:

a = plt.gca()
a.set_yticks(list_of_labels)

这里的意思是,首先你需要获取当前的图表对象,然后通过调用`set_yticks`这个方法来设置Y轴上显示的刻度标签,`list_of_labels`就是你想要显示的标签列表。这样,你就可以自定义Y轴的刻度了。

11

如果你想在一般情况下做到这一点,可以使用 FuncFormatter(可以参考:matplotlib 轴标签格式imshow:标签作为图像索引的任意函数Matplotlib set_major_formatter 属性错误

在你的情况下,下面的代码应该可以工作:

import matplotlib as mpl
import matplotlib.pyplot as plt

def mjrFormatter(x, pos):
    return "$2^{{{0}}}$".format(x)

def mjrFormatter_no_TeX(x, pos):
    return "2^{0}".format(x)

ax = plt.gca()
ax.yaxis.set_major_formatter(mpl.ticker.FuncFormatter(mjrFormatter))
plt.draw()

这里提到的 {} 转义是因为使用了新的字符串格式化方式。

撰写回答