2015-11-25 206 views
4

我已經每隔5分鐘收集一次傳感器數據一個月(30天)。這意味着,我的時間序列數據總共有288 * 30個數據點。使用matplotlib繪製大量時間序列數據點

我想分散繪製數據(x軸:時間,y軸:傳感器值)。 以下代碼用於測試。

import pandas as pd 
from matplotlib import pyplot as plt 
import numpy as np 

# generate time series randomly (length: 1 month) 
rng=pd.date_range("2015-11-11",periods=288*30,freq="5min") 
ts=pd.Series(np.random.randn(len(rng)),rng) 

nr=3 
nc=1 

fig=plt.figure(1) 
fig.subplots_adjust(left=0.04,top=1,bottom=0.02,right=0.98,wspace=0.1,hspace=0.1) 

for i in range(3): 
    ctr=i+1 
    ax=fig.add_subplot(nr,nc,ctr) 

    ax.scatter(ts.index,ts.values) 
    ax.set_xlim(ts.index.min(),ts.index.max()) 

plt.show() 

我已經生成了具有288×30的觀測隨機時間序列數據,並試圖把它收回去散點圖。但是,正如你所看到的,分析這個數字是不可能的。

enter image description here

我想重繪滿足以下條件:

  1. 我想放大的圖的版本。換句話說,一次顯示某個時間範圍(例如2〜3小時)的部分數據點。那麼,相鄰點之間應該有足夠的空間。

  2. 我想將圖保存爲png或pdf文件。然後,如果我打開文件,圖像(或pdf)查看器有一個水平滾動條,它使我能夠瀏覽整個圖形。

有沒有人可以解決它?

我不認爲這對matplotlib專家來說不難,但對我來說,這對初學者來說很難。

+0

指定您需要_horizo​​ntally_放大圖的放大版本非常重要,而不是雙向縮放。 –

回答

3

注,以饗讀者:答案從V1顯著變化,由於澄清的問題

  1. 我的希望放大的圖的版本。換句話說,一次顯示某個時間範圍(例如2〜3小時)的一部分數據點。那麼,相鄰點之間應該有足夠的空間。

放大matplotlib是通過軸的x和y限制來實現的。因此,您可以簡單地將參數更改爲ax.set_xlim,以便相應的時間相差2-3小時或不管您想要的時間長短。知道你有一個樣品,每5分鐘,由於2小時/(5分鐘/樣品)= 24,則可以使用

ax.set_xlim(ts.index.min(),ts.index.min() + 24) 

得到一個2小時的範圍內。

  • 我想保存數字作爲PNG或pdf文件。然後,如果我打開文件,圖像(或pdf)查看器有一個水平滾動條,它使我能夠瀏覽整個圖形。
  • 使用savefig將圖保存到文件。請注意,如果您使用set_xlimxlim或同等設置了軸限制,則只會保存在給定範圍內可見的圖形部分。因此,爲了保存整個圖形(所有數據點均可見),您需要分別將軸限制設置爲最小值和最大值。

    當您在查看器中打開圖像/ PDF文件時,是否顯示滾動條(以及顯示多少圖形)完全取決於查看器。你不能用Python來控制它。但是你可以通過在水平方向上使圖形非常大來給它一個顯示水平滾動條的機會。爲此,您可以在創建圖時通過figsize=(width, height)關鍵字參數,或在現有的Figure對象上使用set_size_inches(width, height) method。在這兩種情況下,測量值均以英寸爲單位傳遞一個值爲width的值比height的值大得多,你會得到一個非常寬的數字;例如,40代表寬度,4代表高度。你必須試驗這些值來找出哪些給你的數字你想要的比例。