matplotlib:更改yaxis tick标签

时间:2013-02-27 22:40:05

标签: python matplotlib

对于y轴上的每个刻度标签,我想更改: label -> 2^label

我正在绘制日志日志数据(基数2),但我希望标签显示原始数据值。

我知道我可以获得当前的y标签 ylabels = plt.getp(plt.gca(), 'yticklabels')

这给了我一个清单:<a list of 9 Text yticklabel objects> 每个都是<matplotlib.text.Text object at 0x...>

我在http://matplotlib.org/users/text_props.html查看了文本对象的文档 但我仍然不确定更改每个文本标签中的字符串的正确语法是什么。

更改标签后,我可以使用以下方法在轴上设置它们:

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

2 个答案:

答案 0 :(得分:10)

如果您想在一般情况下执行此操作,可以使用FuncFormatter(请参阅: matplotlib axis label formatimshow: labels as any arbitrary function of the image indicesMatplotlib set_major_formatter AttributeError

在您的情况下,以下情况应该有效:

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

荒谬的{}转义是新式字符串格式化的结果

答案 1 :(得分:0)

根据http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_yticks

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