2016-12-30 123 views
1

我有一個包含大約100萬個條目的大型數據庫。在一列中有這種形式的日期:'%Y-%m-%d%H:%M:%S。每秒有一個條目。在x軸上繪製大量的日期數據

我可以選擇我想從數據庫繪製時間,例如

日期1 =「2015年4月22日20時28分50秒」

日期2 =「2015年4月23日21: 42:09'

另一列我想繪製在Y軸上。 正如您在具體示例中所看到的,從date1到date2大約有86000個條目 - 或 - 要繪製的點。

有沒有一種方法可以有效地使用matplotlib繪製這些數據,日期顯示在x軸上? 當然,並不是所有的日期都可以顯示出來,但是由於繪圖週期是動態的(我將日期插入網絡表單中),是否有一種編程方式,以便每次都可以實現最佳圖形?

到目前爲止,我可以把所有日期放在一個列表中,並將所有的Y數據放在另一個列表中。

下面是我的代碼到目前爲止,它繪製的數據,但X軸標籤沒有什麼我想要的。

from buzhug import Base 
import datetime 
import data_calculations as pd 
import matplotlib.pyplot as plt 
import matplotlib 
import time 

date1 = '2015-04-22 20:28:50' 
date2 = '2015-04-24 19:42:09' 

db = Base('monitor').open() 
result_set = db.select(['MeanVoltage','time'],"time>=start and time<=stop", start=date1, stop=date2) 

V = [float(record.MeanVoltage) for record in result_set] 
Date = [str(record.time) for record in result_set] 


dates = [datetime.datetime.strptime(record, '%Y-%m-%d %H:%M:%S') for record in Date] 
dates = matplotlib.dates.date2num(dates) 

fig, ax = plt.subplots() 
ax.plot_date(dates, V) 
plt.grid(True) 
plt.show() 

,其結果是 Plot

預先感謝您

編輯:

我已經加上幾行的固定問題:

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y %H:%M:%S')) 

plt.gcf().autofmt_xdate() 

然而,現在我想把這個情節傳遞給一個web服務器[R使用mpld3插件:

mpld3.plugins.get_plugins(fig) 
mpld3.fig_to_html(fig) 
mpld3.show() 

雖然,沒有插件,情節似乎只是罰款,與x軸的日期,用插件看起來它不能解析此行

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y %H:%M:%S')) 

進入html代碼,結果x軸標籤出現在unix時間。 任何人都知道插件有什麼問題?

回答

0

問題是大量的點(每秒一個是捆綁!)。如果你試圖將每個點繪製成一個圓圈,你將會遇到這些問題。 但它很容易被其更改爲線圖,改變解決:

ax.plot_date(dates, V, '-') # Where '-' means a line plot 

例如:

# some sample data 
x = np.linspace(0.1, np.pi, 86000) 
y = np.cos(x)**2 * np.log(x) 
plt.plot(x, y, 'o') 

enter image description here

plt.plot(x, y, '-') 

enter image description here

+0

謝謝你,但千萬你知道一種解決x軸標籤問題的方法嗎?即使我嘗試放大,小時也只會出現(不是日期),並且它們會相互重疊。我想要的是,儘可能以最好的方式呈現日期,即使對於這些大數據集也是如此,而不會重疊,當然,只保留其中的一部分。 – tzoukritzou