2013-07-08 70 views
1

我從第二秒開始計算浮點數(從time.time()開始),並且我試圖將它轉換爲這樣(行[0]):從時間()開始繪製日期(從matplotlib開始)

x,y = [],[] 
csv_reader = csv.reader(open(csvFile)) 
for line in csv_reader: 
    x.append(float(line[1])) 
    y.append(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(float(line[0])))) 


fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot(x,y,'o-') 
fig.autofmt_xdate() 

plt.show() 

但matplotlib上示數出像這樣下去:

ValueError: invalid literal for float(): 2013-07-08 15:04:50

如何正確格式化任何想法?

乾杯

+0

你爲什麼要採取浮動形式2013-的數量07-08 15:04:50?這不是一個浮點數...... – Pablo

+0

因爲如果我自己使用float(line [0])如果給我一個非常奇怪的結果,我意識到我沒有提供正確的數據,但我不知道如何格式化我的time.time()適用於matplotlib –

+0

您可以給我們更多關於哪些是行[0]和行[1]的repr()的細節? – Pablo

回答

3

你得到一個ValueError因爲該格式是float()無效。除了將其格式化爲float值之外,請嘗試將格式化的字符串附加到列表中,並按如下所示使用yticks()函數。

>>> yAxis = ['2013-07-08 15:04:50', '2013-07-08 15:03:50', '2013-07-08 5:04:50'] 
>>> from random import randint 
>>> xAxis = [randint(0, 10) for _ in range(3)] 
>>> import pylab as plt 
>>> plt.plot(xAxis, range(len(xAxis))) 
>>> plt.yticks(range(len(yAxis)), yAxis, size='small') 
>>> plt.show() 

這給你類似下面的情節,希望這是你正在尋找:

enter image description here

P.S - 你想在X軸上的日期?

+0

是的,我的意思是在X軸上有日期(仍然試圖弄清楚那個xticks技巧..) –

+0

只要做'plt.plot(yAxis)'然後'plt.xticks(range(len(xAxis) ),xAxis,size =「small」)'當然,適當地改變'xAxis'和'yAxis'。 –

+0

很好!似乎工作正常。你知道如何「跳過」日期,顯然是試圖塞滿圖上的所有日期和方式太多了! –

3

這裏還有另外一個例子,在日期間的間距不統一,並且可以隨機分佈:

import numpy as np 
import matplotlib.pyplot as plt 
import time 

time_data = np.array([1373316370.877059, 
         1373316373.95448, 
         1373316378.018756, 
         1373316381.960965, 
         1373316383.586567, 
         1373316387.111703, 
         1373316387.611037, 
         1373316391.923015, 
         1373316393.80545, 
         1373316398.294916]) 

ydata = np.random.rand(len(time_data)) 
time_formatted = [] 
for element in time_data: 
    time_formatted.append(time.strftime('%Y-%m-%d %H:%M:%S', 
             time.localtime(element))) 

isort = np.argsort(time_data) #Sorting time_data 
plt.xticks(time_data[isort], 
      np.array(time_formatted)[isort], 
      size='small', 
      rotation=35) 
plt.plot(time_data[isort],ydata[isort],'k-') 
plt.show() 

enter image description here

相關問題