我有一个使用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中打开的
答案 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')