8

对于 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)

4

2 回答 2

11

如果你想在一般情况下这样做,你可以使用FuncFormatter(参见: matplotlib 轴标签格式, imshow:标签作为图像索引的任意函数。Matplotlib 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()

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

于 2013-02-27T23:43:01.807 回答
-1

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

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

于 2013-05-02T02:34:48.703 回答