2011年09月19日 星期一 09:38
import numpy
from matplotlib.mlab import csv2rec
from pylab import figure, show
import matplotlib.cbook as cbook
from matplotlib.ticker import Formatter
datafile = cbook.get_sample_data('msft.csv', asfileobj=False)
print 'loading', datafile
r = csv2rec(datafile)[-40:]
class MyFormatter(Formatter):
def __init__(self, dates, fmt='%Y-%m-%d'):
self.dates = dates
self.fmt = fmt
def __call__(self, x, pos=0):
'Return the label for time x at position pos'
ind = int(round(x))
if ind>=len(self.dates) or ind<0: return ''
return self.dates[ind].strftime(self.fmt)
formatter = MyFormatter(r.date)
fig = figure()
ax = fig.add_subplot(111)
ax.xaxis.set_major_formatter(formatter)
ax.plot(numpy.arange(len(r)), r.close, 'o-')
fig.autofmt_xdate()
show()
红色字体代码功能懂,但是不知它如何执行的,其中的参量x具体什么呢?哪里传递过来的?
2011年09月19日 星期一 12:07
__call__是当对象被当作函数调用时执行。formatter就是这样一个对象,因此你可以自己调用formatter(1.2),看它的结果。
ax.xaxis.set_major_formatter(formatter)
上面这句话,将formatter对象传递给xaxis对象,xaxis对象在它需要的时候会调用formatter(..)从而计算轴上的标签。这个参数x是xaxis中的某个方法在调用它时传递过去的。
2011年09月19日 星期一 13:53
那这里的x有具体的值吗?我们能够知道吗?
每一行红色代码的意义分别是什么呢?
2011年09月19日 星期一 15:06
你可以在__call__中增加一句print x,输出x的值。
这个函数将x变成整数ind,然后以ind为下标获得self.dates中所保存的时间对象,并调用其strftime()方法将其转换成字符串。
Zeuux © 2024
京ICP备05028076号