matplotlib: 更改y轴刻度标签
我想把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)
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()
这里提到的 {}
转义是因为使用了新的字符串格式化方式。