2016-04-06 11 views
0
繪製

我目前記錄溫度和溼度水平從傳感器到當前格式的CSV文件: -Matplotlib限行的從CSV

2016-04-05 20:21:39,15.50,49.30 
2016-04-05 20:22:40,15.50,49.30 
2016-04-05 20:23:40,15.40,49.30 
2016-04-05 20:24:41,15.40,49.40 

我然後使用numpy.loadtxt中的值讀取到繪圖: -

dates, temp = np.loadtxt('templog.csv', 
         converters={0: datefunc}, 
         unpack=True, 
         delimiter=',', 
         usecols=(0, 1)) 

dates2, humid = np.loadtxt('templog.csv', 
          converters={0: datefunc}, 
          unpack=True, 
          delimiter=',', 
          usecols=(0, 2)) 

這一切都工作得很好,但它是從一開始就繪製每個指標。我想限制'x'最後的行數被繪製,以允許我只做最後24小時的例子。

這是可能的使用CSV文件作爲源或我會更好地插入數據到sqlite3數據庫,然後使用適當的選擇查詢拉我想要的數據和繪圖。

+0

您能不能告訴我們你的情節,並告訴我們你想改變什麼? – Hun

+0

不知道告訴你情節會有所幫助。我只是不想繪製CSV文件中的每一行。如果它的長度爲500,1000或10,000行,我該如何繪製文件的最後100行? – harveyd

+0

只需將要繪製的數組的一部分切片即可。查看切片語法以及它如何與Numpy數組一起工作。也可以在一次調用中加載三個數組到'loadtxt()'。 :-) – BlackJack

回答

0

您可以保持原樣讀取數據。只要你喜歡就限制繪圖。

import matplotlib.pyplot as plt 
fig, ax = plt.subplots() 
ax.plot_date(dates, temp) 
ax.set_xlim(['yyyy-mm-dd hh:mm:dd', 'YYYY-MM-DD HH:MM:DD']) 
+0

嘗試此方法無法讓它在我的方案中工作。發佈我能夠得到的工作。 – harveyd

1

與@blackJack靈感,我可以使用數組切片的plot_date內繪製在numpy的解包如temp[-10:]所產生的陣列中的最後x項目 -

hours = 24 # How many hours to show on the graph 
logtime = 5 # How many minutes each sample is taken 

ax.plot_date(dates[-((hours*60)/logtime):], 
      temp[-((hours*60)/logtime):], ls='-', marker='', color='red') 
ax2.plot_date(dates[-((hours*60)/logtime):], 
       humid[-((hours*60)/logtime):], ls='-', marker='')