0

我创建了一个脚本,用于在一个月内下载有关特定货币的信息,然后将其存储为 .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 文件)中绘制图表吗?提前致谢!

4

2 回答 2

0

我会为此使用熊猫和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()

在此处输入图像描述

于 2015-11-24T22:15:50.743 回答
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()

这将导致以下输出:

脚本的输出

于 2015-11-25T07:59:09.583 回答