2017-05-25 75 views
1

有人可以给我一个如何使用以下tickFormatters的例子。 docs对我没有任何意义。Matplotlib Ticker

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

试着提供一个完整的例子,说明你有什么,它产生了什么,并解释你想要生产什么。 – Gabriel

回答

1

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, ...)各个字母被用作标签。

+0

好吧,我想我明白了。所以字符串'“{x:,}”'表示我们希望变量x(被mpl传递给格式调用)用千位分隔符格式化。现在我唯一的问题是g是什么?这就像指定浮点型f?如果有的话,那里还有其他的选择吗? – RSHAP

+0

'g'是一种通用的数字格式,如果需要,可以舍去小数点。你不需要在这里使用它;如果你喜欢,就离开它。你可以在[官方python文档](https://docs.python.org/3/library/string.html#format-specification-mini-language)中阅读更多关于字符串格式的内容。 – ImportanceOfBeingErnest