2016-01-02 1 views
1

У меня возникли некоторые серьезные проблемы, связанные с построением моего первого линейного графика, и в настоящее время я работаю и исследую свои ошибки в течение долгого времени, изнуряя все усилия.Как форматировать дату и время для диаграммы строк Python Bokeh/matplotlib datetime и проблемы с графиком

У меня есть следующие данные примера времени даты с продажами в следующем формате. Данные импортируются из моей базы данных MySQL

2015-12-30 01:58:00 10 
2015-12-30 01:59:00 16 
2015-12-30 02:00:00 21 
2015-12-30 02:01:00 5 
2015-12-30 02:02:00 2 
2015-12-30 02:03:00 4 
2015-12-30 02:04:00 11 
2015-12-30 02:06:00 5 
2015-12-30 02:07:00 10 

Я трудолюбивый на графиках линии и хотел бы завершить линейный график в обоих боке и Matplotlib. Мой первый выбор - пример графического графика bokeh here.

Сценарии matplotlib, которые я использую, прокомментированы ниже.

Я получил много и много ошибок и перечислю ошибки ниже, поскольку я иду. Общий краткий обзор ошибок приводит меня к мысли, что мое datetime не отформатировано правильно, и я не понимаю Auto datetime, отформатированный в matplotlib. Я также использовал регулярные выражения для сортировки даты и печати даты в правильном формате.

#row[0] is the date 
#row[1] is the sales 
2015-12-30 02:09:00 1 
2015-12-30 02:10:00 3 
2015-12-30 02:12:00 2 
2015-12-30 02:13:00 1 
2015-12-30 02:14:00 18 
2015-12-30 02:15:00 1 
2015-12-30 02:16:00 10 
2015-12-30 02:17:00 2 

пример боке

import numpy as np 

from bokeh.plotting import figure, output_file, show 
import utils 
from bokeh.io import output_notebook, show 
from bokeh.plotting import figure 

# the import from MYSQL works great and data prints 100% works great 
db = MySQLdb.connect("all my database stuff") 
cur = db.cursor() 
cur.execute("SELECT Statement") 
#row[0] is the date in the format above "2015-12-30 02:09:00" 
#row[1] is the sales in the format above "1" 
try: 
    for row in cur.fetchall(): 
    date = row[0] 
    sales = row[1] 
    #regex to strip date hypens and colons replace with spaces 
    #date_clean = re.sub('[^A-Za-z0-9]+', '', date)  
    print date, 
    print sales 
    #print date_clean prints with no extra characters 
except: 
    print "error: unable to fetch data" 

# prepare some data 
x = 'date' 
#x = 'date_clean' 
y = 'sales' 
# output to static HTML file 
output_file("lines.html", title="line plot example") 
# create a new plot with a title and axis labels 
p = figure(title="example chart", x_axis_label='x', y_axis_label='y') 
# add a line renderer with legend and line thickness 
p.line(x, y, legend="Temp.", line_width=2) 
# show the results 
show(p) 

Текущие ошибки, хотя я работал через сотни ошибок. «Lines.html» открывается с полем, но нет строки, дат или продаж.

No handlers could be found for logger "/usr/local/lib/python2.7/dist-packages/bokeh/validation/check.pyc"

(process:20113): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed

здесь код Matplotlib Я использую

x = date_clean 
y = sales 
plt.plot_date(x=date_clean, y=sales) 
plt.title("example chart") 
plt.ylabel("sales") 
plt.grid(True) 
plt.show() 
""" 

Может кто-то мне точку в правильном направлении. Может ли кто-нибудь помочь с правильным форматом для даты времени bokeh или matplotlib требует выполнения правильного линейного графика и может кто-нибудь объяснить текущую ошибку.

+0

Я не знаю 'bokeh', но какова ошибка, которую вы получаете с помощью' matplotlib'? –

+0

для matplotlib Я получаю окно вывода QT. 1. Внутри графика находится только одна синяя точка посередине. вокруг поля пуст, за исключением стандартных кнопок назад. Я получаю ложные ошибки – jedimonk

+0

при использовании выражений reg: error dt = datetime.datetime.fromordinal (ix) .replace (tzinfo = UTC) OverflowError: целое число со знаком больше, чем максимальное – jedimonk

ответ

3

Когда вы предоставляете ярлыки для x и y, вы также должны добавить источник, из которого Bokeh может получать фактические данные на основе этих меток. В настоящее время вы сообщаете Bokeh, что ваши данные x и y являются строками, которые не могут быть построены в виде линейной диаграммы.

Различные источники возможны, см: http://bokeh.pydata.org/en/0.10.0/docs/reference/models/sources.html

Так как использование:

p.line(x, y, source=...) 

или предоставить фактические данные:

p.line(dates, sales) 

Кроме того, при создании фигуры, указав x axis быть datetime может помочь, хотя я не думаю, что главная проблема здесь.

p = figure(x_axis_type="datetime", .... 

Btw, это помогает, если вы создаете пример, который могут выполнять другие. У меня нет вашей базы данных, поэтому я не могу воспроизвести вашу ошибку или проверить мое (возможное) решение.

0

У меня были/возникают аналогичные проблемы. Я нашел способ обойти это в MPL, но не Bokeh.

Для Matplotlib:

# Format the dates using dates.strftime(format) 
# see https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior 

dates = dates.strftime('%b%d%y') 

# setup figure and axes object 
fig = plt.figure(title = 'fig_title_here') # 
ax = plt.subplot() 

# use regular plot to plot the sales date 
ax.plot(range(len(sales)), sales) 
# label x ticks as dates 
ax.set_xticklabels([dates]) 
plt.axis() 

Надежда, что помогает. Также, если вы найдете ответ в bokeh, отправьте его здесь.