我正在尝试使用matplotlib和pandas绘制一些数据。但是,在使用DateFormatter时,日期的呈现方式不正确,具体取决于我从DataFrame中过滤掉的内容:
以下两个示例中的日期使用matplotlib作为'August 20 00 2013'呈现,正如所料:
df['metric2'].plot()
ax = gca()
ax.xaxis.set_major_formatter(DateFormatter('%B %d %H %Y'))
draw()
df[df['metric1']>1000]['metric2'].plot()
ax = gca()
ax.xaxis.set_major_formatter(DateFormatter('%B %d %H %Y'))
draw()
但是,使用下面的代码,日期将呈现为'February 01 00 1048':
df[df['browser']=='Chrome/29']['metric2'].plot()
ax = gca()
ax.xaxis.set_major_formatter(DateFormatter('%B %d %H %Y'))
draw()
答案 0 :(得分:2)
我们需要有一组具体的数据和程序来引用。这里没问题:
data.txt中:
2013-08-18 00 IE 1000 500 3000
2013-08-19 00 FF 2000 250 6000
2013-08-20 00 Opera 3000 450 9000
2001-03-21 00 Chrome/29 3000 450 9000
2013-08-21 00 Chrome/29 3000 450 9000
2014-01-22 00 Chrome/29 3000 750 9000
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as md
import datetime as dt
df = pd.read_table(
'data.txt',
index_col=0,
parse_dates=True,
date_parser=lambda s: dt.datetime.strptime(s, '%Y-%m-%d %H'),
header=None,
names=['browser', 'metric1', 'metric2', 'metric3']
)
print df
df[df['browser']=='Chrome/29']['metric2'].plot()
ax = plt.gca()
ax.xaxis.set_major_formatter(md.DateFormatter('%B %d %H %Y'))
plt.draw()
plt.show()
--output:--
browser metric1 metric2 metric3
2013-08-18 IE 1000 500 3000
2013-08-19 FF 2000 250 6000
2013-08-20 Opera 3000 450 9000
2001-03-21 Chrome/29 3000 450 9000
2013-08-21 Chrome/29 3000 450 9000
2014-01-22 Chrome/29 3000 750 9000
调整轴后,您可以更好地查看点(设置x轴的日期范围,设置y轴的范围):
...
df[df['browser']=='Chrome/29']['metric2'].plot(style='r--')
ax = plt.gca()
ax.xaxis.set_major_formatter(md.DateFormatter('%B %d %H %Y'))
ax.set_xlim(dt.datetime(2000, 1, 1,), dt.datetime(2017, 1, 1))
ax.set_ylim(400, 1000)
...
...
只要你拒绝发布一个最小的例子以及产生你不想要的输出的数据......