Matplotlib Ticker

时间:2017-05-25 18:18:06

标签: python matplotlib ticker

有人可以举例说明如何使用以下tickFormatters。 docs对我没有任何意义。

ticker.StrMethodFormatter() ticker.IndexFormatter()

例如,我可能会认为

x = np.array([ 316566.962,  294789.545,  490032.382,  681004.044,  753757.024,
            385283.153,  651498.538,  937628.225,  199561.358,  601465.455])
y = np.array([ 208.075,  262.099,  550.066,  633.525,  612.804,  884.785,
            862.219,  349.805,  279.964,  500.612])
money_formatter = tkr.StrMethodFormatter('${:,}')

plt.scatter(x,y)
ax = plt.gca()
fmtr = ticker.StrMethodFormatter('${:,}')
ax.xaxis.set_major_formatter(fmtr)

将我的刻度标签设置为美元签名和逗号sep为数千个地方ala

['$300,000', '$400,000', '$500,000', '$600,000', '$700,000', '$800,000', '$900,000']

但我得到索引错误。

IndexError: tuple index out of range

对于IndexFormatter文档说:

  

从标签列表中设置字符串

我真的不知道这意味着什么,当我尝试使用它时,我的抽搐就会消失。

1 个答案:

答案 0 :(得分:4)

StrMethodFormatter 确实可以通过提供可以使用format方法格式化的字符串来实现。因此,使用'${:,}'的方法朝着正确的方向发展。

然而,从the documentation我们学习

  

用于该值的字段必须标记为x,并且用于该位置的字段必须标记为pos。

这意味着您需要为该字段提供实际标签x。此外,您可能希望将数字格式指定为g,而不是小数点。

fmtr = matplotlib.ticker.StrMethodFormatter('${x:,g}')

enter image description here

IndexFormatter 在这里用处不大。如您所知,您需要提供标签列表。这些标签用于索引,从0开始。因此,使用此格式化程序需要使x轴从零开始并超过一些整数。

示例:

plt.scatter(range(len(y)),y)
fmtr = matplotlib.ticker.IndexFormatter(list("ABCDEFGHIJ"))
ax.xaxis.set_major_formatter(fmtr)

enter image description here

此处,刻度线位于(0,2,4,6,....),列表(A, C, E, G, I, ...)中的相应字母用作标签。