2012-12-17 266 views
-1

我的数据如下所示:Python的Matplotlib绘图CSV数据,格式化日期X标签

2012021305, 65217 
2012021306, 82418 
2012021307, 71316 
2012021308, 66833 
2012021309, 69406 
2012021310, 76422 
2012021311, 94188 
2012021312, 111817 
2012021313, 127002 
2012021314, 141099 
2012021315, 147830 
2012021316, 136330 
2012021317, 122252 
2012021318, 118619 
2012021319, 115763 
2012021320, 121393 
2012021321, 130022 
2012021322, 137658 
2012021323, 139363 

其中第一列是数据YYYYMMDDHH。我正在尝试使用csv2rec模块来绘制数据图。我可以将数据绘制成图形,但x轴和标签没有按我期望的方式显示。

import matplotlib 
matplotlib.use('Agg') 
from matplotlib.mlab import csv2rec 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 
from pylab import * 


output_image_name='plot1.png' 
input_filename="data.log" 

input = open(input_filename, 'r') 

input.close() 

data = csv2rec(input_filename, names=['time', 'count']) 
rcParams['figure.figsize'] = 10, 5 
rcParams['font.size'] = 8 

fig = plt.figure() 

plt.plot(data['time'], data['count']) 

ax = fig.add_subplot(111) 
ax.plot(data['time'], data['count']) 
hours = mdates.HourLocator() 
fmt = mdates.DateFormatter('%Y%M%D%H') 
ax.xaxis.set_major_locator(hours) 
ax.xaxis.set_major_formatter(fmt) 

ax.grid() 

plt.ylabel("Count") 
plt.title("Count Log Per Hour") 

fig.autofmt_xdate(bottom=0.2, rotation=90, ha='left') 

plt.savefig(output_image_name) 

我认为这与日期格式有关。有什么建议么?

+3

你期望/想要什么? –

+0

我想X标签是数据/小时和正确的刻度被添加,因为它现在没有X标签 – secumind

回答

2

您需要的x值转换为datetime对象

喜欢的东西:

time_vec = [datetime.strp(str(x),'%Y%m%d%H') for x in data['time']] 
plot(time_vec,data['count']) 

目前,你告诉蟒蛇格式整数(2012021305)为一个日期,它不知道怎么做,所以它返回和空字符串(虽然,我怀疑你得到的错误提出的地方)。

你还应该检查你的format string加价。

+0

谢谢我会试试 – secumind