对于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)
答案 0 :(得分:10)
如果您想在一般情况下执行此操作,可以使用FuncFormatter
(请参阅:
matplotlib axis label format,imshow: labels as any arbitrary function of the image indices。 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()
荒谬的{}
转义是新式字符串格式化的结果
答案 1 :(得分:0)
根据http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_yticks
a = plt.gca()
a. set_yticks(list_of_labels)