使用Python中的PyX图形包绘制图形

时间:2015-11-24 20:45:39

标签: python pyx

我创建了一个脚本,可以在一个月内下载有关特定货币的信息,然后将其存储为.DAT文件。示例.DAT文件如下所示:

2015-11-19 4.2477

2015-11-18 4.2509

2015-11-17 4.2433

2015-11-16 4.2472

2015-11-13 4.2362

2015-11-12 4.2245

2015-11-10 4.2485

依此类推......因此,您会看到所有内容都以两列的形式存储。现在,问题是:我想从中制作一个图表。我试图使用PyX但不知何故它不能将日期放在x轴上。你知道如何从这两列(即.DAT文件)中绘制图形吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

我会使用pandas和matplotlib。

为了方便起见,您需要在读入数据框之前在文件中插入标题行。

数据

    Date xRate
    2015-11-19 4.2477
    2015-11-18 4.2509
    2015-11-17 4.2433
    2015-11-16 4.2472
    2015-11-13 4.2362
    2015-11-12 4.2245
    2015-11-10 4.2485

<强>代码

    import pandas as pd 
    import numpy as np
    import matplotlib as plt
    # Put the data in the clipboard
    clipdf = pd.read_clipboard()

    df = clipdf.set_index('Date')
    plt.figure(); df.plot(); plt.legend(loc='best')
    plt.show()

enter image description here

答案 1 :(得分:0)

PyX还没有正式的时间轴支持。但是,您可以使用以下代码使其工作。不幸的是,你必须自己设置刻度和短信。

import time, datetime
from pyx import *
from pyx.graph.axis import timeaxis
from pyx.graph import data

# read the data with the first column being strings
d = data.file("timeaxis.dat", date=1, value=2)

# recreate the data while converting the date column to datetime
d = data.points([[datetime.datetime(*map(int, date.split('-'))), value]
                  for date, value in zip(d.columns["date"], d.columns["value"])], x=1, y=2)

g = graph.graphxy(height=5, x=timeaxis.timeaxis(manualticks=[timeaxis.timetick(2015, 11, 10),
                                                             timeaxis.timetick(2015, 11, 12),
                                                             timeaxis.timetick(2015, 11, 14),
                                                             timeaxis.timetick(2015, 11, 16),
                                                             timeaxis.timetick(2015, 11, 18),
                                                             timeaxis.timetick(2015, 11, 20)],
                                                texter=timeaxis.timetexter("%b %d")))
g.plot(d)
g.writePDFfile()

这将产生以下输出:

output of the script