在matplotlib图上创建轴的值

时间:2017-09-20 20:34:32

标签: python pandas matplotlib graph data-visualization

我有一个使用pandas和matplotlib制作的时间序列图。我的功能如下:

def graph(file):
    pdf = PdfPages('...pdf')
    # Temporal Change (Time Series)
    pd.read_csv(file, usecols=['close','open']).plot()
    plt.xlabel('Date')
    plt.ylabel('Value')
    plt.title('Open/Close Over Time')
    plt.show()

我的数据文件包含与值对应的标题,日期标题位于索引0处。(如果那是相关的?)

现在图表有效,但值的索引显示的是时间而不是日期。如何使x轴(日期)显示与数据对应的日期而不是索引?

编辑:数据文件看起来像这样

date    close   volume  open    high    low
2017/09/13  173.05  9112378 173.01  173.17  172.06
2017/09/12  172.96  11179730    173.76  174 171.75
2017/09/11  173.51  12353760    172.4   173.89  172.2
2017/09/08  170.95  10985350    173.09  173.49  170.8
2017/09/07  173.21  18039640    171.94  173.3067    170.27
2017/09/06  172.09  13886740    170.91  172.48  169.57
2017/09/05  170.72  13214940    171.27  172.3875    169.55
2017/09/01  172.02  11663360    172.4   172.915 171.31
2017/08/31  171.97  17216280    170.4   172.145 170.06

是一个.csv文件,^是从它复制的,是在excel中打开的

1 个答案:

答案 0 :(得分:3)

如果您要使用pandas的绘图方法并想要日期时间,我建议您确保解析日期并将其设置为索引。我也推荐面向对象的matplotlib接口。

from io import StringIO
from matplotlib import pyplot
import pandas

datafile = StringIO("""\
date    close   volume  open    high    low
2017/09/13  173.05  9112378 173.01  173.17  172.06
2017/09/12  172.96  11179730    173.76  174 171.75
2017/09/11  173.51  12353760    172.4   173.89  172.2
2017/09/08  170.95  10985350    173.09  173.49  170.8
2017/09/07  173.21  18039640    171.94  173.3067    170.27
2017/09/06  172.09  13886740    170.91  172.48  169.57
2017/09/05  170.72  13214940    171.27  172.3875    169.55
2017/09/01  172.02  11663360    172.4   172.915 171.31
2017/08/31  171.97  17216280    170.4   172.145 170.06
""")

fig, ax = pyplot.subplots(figsize=(7, 5))
_ = (
    pandas.read_csv(datafile, sep='\s+',
                    usecols=['date', 'open', 'close'],
                    parse_dates=['date'])
        .set_index('date')
        .plot(ax=ax)
)
ax.set_xlabel('Date')
ax.set_ylabel('BUY! SELL!')
ax.set_title('Money money money money')

enter image description here