2015-11-01 71 views
-2

我有從服務器中的Python - 實時更新圖表;繪製時間對x軸

<hh-mm-ss>,<ddd> 

這裏的形式收集數據的Python腳本,所述第一字段是日期和所述第二字段是一個整數數字。這些數據正被寫入一個文件中。

我有另一個線程正在運行,它繪製了我在上面提到的文件中的活動圖。

所以這個文件具有類似的數據,

<hh-mm-ss>,<ddd> 
<hh-mm-ss>,<ddd> 
<hh-mm-ss>,<ddd> 
<hh-mm-ss>,<ddd> 

現在我想繪製時間序列圖Matplotlib與上面顯示的數據。 但是當我嘗試,它拋出一個錯誤的說法,

ValueError: invalid literal for int() with base 10: '15:53:09' 

當我有正常的數據如下圖所示,一切都很好

<ddd>,<ddd> 
<ddd>,<ddd> 
<ddd>,<ddd> 
<ddd>,<ddd> 

UPDATE 我的代碼從文件生成圖表我在上面描述如下所示,

def animate(i): 

    pullData = open("sampleText.txt","r").read() 
    dataArray = pullData.split('\n') 
    xar = [] 
    yar = [] 
    for eachLine in dataArray: 
     if len(eachLine)>1: 
      x,y = eachLine.split(',') 
      xar.append(int(x)) 
      yar.append(int(y)) 
    ax1.clear() 
    ax1.plot(xar,yar) 

UP DATED CODE

def animate(i): 
    print("inside animate") 
    pullData = open("sampleText.txt","r").read() 
    dataArray = pullData.split('\n') 
    xar = [] 
    yar = [] 
    for eachLine in dataArray: 
     if len(eachLine)>1: 
      x,y = eachLine.split(',') 
      timeX=datetime.strptime(x, "%H:%M:%S") 
      xar.append(timeX.strftime("%H:%M:%S")) 
      yar.append(float(y)) 
    ax1.clear() 
    ax1.plot(xar,yar) 

現在我在這行(ax1.plot(xar,yar)) 我將如何度過這得到錯誤?

+0

你應該張貼您的代碼,以顯示你已經嘗試過的東西。儘管如此,我還是給了你一個迴應,幫助你朝着正確的方向前進。 – ray

+0

我會發布我的代碼,請刪除投票,如果你已經完成了這個原因..我只是編輯我的問題:( –

+0

完成..請撤消它 –

回答

-1

錯誤告訴你問題的原因:你試圖將一個字符串(如'15:53:09')轉換爲一個整數。該字符串不是有效的數字。

相反,您應該考慮使用一個datetime對象從datetime模塊的日期/時間的事情,或者至少split婷串到工作到使用':'作爲分隔符字段,分別使用的每個字段。

考慮這個簡短的演示:

>>> time = '15:53:09' 
>>> time.split(':') 
['15', '53', '09'] 
>>> [int(v) for v in time.split(':')] 
[15, 53, 9] 
>>> int(time) # expect exception 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '15:53:09' 
>>> 
+0

爲什麼投票嗎? – ray

0

你正試圖從代表時間戳的字符串解析整數。當然它失敗了。

爲了能夠在圖中使用時間戳,需要將它們解析爲適當的類型,例如datetime.timedatetime.datetime。你可以使用datetime.datetime.strptime(),dateutil.parser.parse()或者time.strptime()

然後,繪製數據很簡單。看看交互式繪圖模式:matplotlib.pyplot.ion()

作爲參考/進一步閱讀:


基於您的代碼我已經創建了一個例子。我已經列出了一些說明,爲什麼我認爲最好這樣做。

# use with-statement to make sure the file is eventually closed 
with open("sampleText.txt") as f: 
    data = [] 
    # iterate the file using the file object's iterator interface 
    for line in f: 
     try: 
      t, f = line.split(",") 
      # parse timestamp and number and append it to data list 
      data.append((datetime.strptime(t, "%H:%M:%S"), float(f))) 
     except ValueError: 
      # something went wrong: inspect later and continue for now 
      print "failed to parse line:", line 
# split columns to separate variables 
x,y = zip(*data) 
# plot 
plt.plot(x,y) 
plt.show() 
plt.close() 

對於進一步閱讀:

+0

我我現在得到這樣的錯誤「ValueError:無效文字爲float():19:09:12」這裏的19:09:12是我想在X軸上顯示的時間。我已經發布了更新後的代碼在我的問題 –

+0

@VasanthNagKV你必須提供更多關於錯誤的信息(哪一行,哪個上下文?),以便它有幫助。但是,你似乎再次向'xar'列表添加一個字符串,不要調用' strftime()'在這一點上,它將對象轉換爲一個字符串表示形式,你不想要這樣的結果 – moooeeeep

+0

我給你所有我相信的信息,請讓我知道一件事情,可以使用日期時間對象pl在xaxis上?或者它應該是一個int還是float? –