2015-11-05 136 views
0

我正在繪製一個文本文件中的數據,其中兩列由逗號分隔。第一列是格式化爲%H:%S的時間。第二行是數字。在Python中格式化X軸時間

現在,我的編碼顯示的是%Y%m%d %H:%M:%s而不是%H:%M。正如你所看到的,有很多條目,它們彼此重疊。我怎樣才能讓蜱跳過每1或2,使時間更加明顯?

我該如何解決這個問題?

文件內容:

09:30,33.89 
09:34,34.17 
09:39,34.41 
09:44,34.20 
09:49,34.40 

腳本:

#!/usr/bin/python 
from __future__ import division 
import sys 
import csv 
import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 
import datetime as dt 
import numpy as np 

homedir = '/home//' 

ymd = sys.argv[1] 
sym = sys.argv[2] 

x,y = [],[] 
csv_reader = csv.reader(open(homedir + 'finance/data/' + sym + '_' + ymd)) 
for line in csv_reader: 
    x.append(dt.datetime.strptime(line[0], '%H:%M')) 
    y.append(str(line[1])) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

#ax.grid(which='both') 

ax.plot(x,y,'-',ms=3,linewidth=1) 
#fig.autofmt_xdate(x,rotation=90,ha='center') 
plt.xticks(x, x, rotation=90,ha='center') 
plt.title('Daily Market Data for ' + sym + ' on ' + ymd) 
plt.ylabel('Stock Price [$]') 
plt.xlabel('Time of Day') 
plt.grid(True) 

fig.set_size_inches(9,5) 

plt.savefig(homedir + 'finance/' + sym + '_' + ymd + '.png', dpi = 300, bbox_inches='tight') 
#plt.show() 

簡介:

enter image description here

+0

形象被打破。 –

+0

剛剛重新上傳的情節。 –

+0

這可能有所幫助:http://matplotlib.org/api/dates_api.html#matplotlib.dates.DateFormatter –

回答

2

datetime.strptime()使用第二個參數將字符串時間解析爲datetime對象,以將原始字符串中的值映射到datetime組件。這裏有一些指南解釋了strptime()strftime()之間的區別。

無論如何,我想你可以使用原始字符串作爲你的xticks,並留下一行爲你的情節單獨建立x列表,因爲它似乎工作正常。

試着改變你的for環節這樣的:

x,y,xticks = [],[],[] 
csv_reader = csv.reader(open(homedir + 'finance/data/' + sym + '_' + ymd)) 
for line in csv_reader: 
    xticks.append(line[0]) 
    x.append(dt.datetime.strptime(line[0], '%H:%M')) 
    y.append(str(line[1])) 

然後,當然,擺脫你的其他xticks分配和改變你的plt.xticks調用此:

plt.xticks(x, xticks, rotation=90,ha='center') 

編輯:OP在這個問題中,我會給出一些簡要的建議。

也許做一些哈克在您for循環像

for line in csv_reader: 
    time = dt.datetime.strptime(line[0], '%H:%M') 
    if time.minute % 5 == 0: 
     xticks.append(line[0]) 
    else: 
     xticks.append("") 
    x.append(time) 
    y.append(str(line[1])) 
+0

嗨Jason。感謝您的答覆!我忘了提及我希望x軸是'%H:%M'次,而不是我在xticks數組中定義的。仍然獲得%Y%m%d%H:%M:%s而不是%H:%M ... –

+0

您是否擺脫了製作「xticks」列表的行?注意在我的答案的'for'循環中,它正在加載一個新的空的'xticks'列表。現在針對剛剛添加到您的問題中的其他問題,我將進行編輯。 – Jason

+0

Doh!忘了刪除以前定義的xticks數組。這對於將%Y%m%d%H:%M:%s降到%H:%M完美無缺! –