Python和科学计算认证群组  - 讨论区

标题:python 绘制股票K线图时间问题

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哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号