2016-12-30 7 views
1

У меня есть большая база данных, содержащая около 1 миллиона записей. В одной колонке указаны даты в этой форме: «% Y-% m-% d% H:% M:% S. Каждой секунде бывает одна запись.Участок огромного количества данных с датами по оси x

Я могу выбрать период, я хочу, чтобы построить из базы данных, например,

DATE1 = '2015-04-22 20:28:50'

date2 = «2015-04-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

Спасибо заранее

Edit:

Я исправили проблему, добавив следующие строки:

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

plt.gcf().autofmt_xdate() 

Однако, теперь я хочу передать сюжет в веб-службу г используя mpld3 плагин:

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

While, без плагина, сюжет появляется просто отлично, с датами в оси х, с плагином, кажется, что это не может разобрать эту строку

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

 Смежные вопросы

  • Нет связанных вопросов^_^