Найти - Пользователи
Полная версия: Постройка диаграммы с помощью bokeh
Начало » Python для новичков » Постройка диаграммы с помощью bokeh
1
keodomir
Всем привет!
Помогите сформировать график по датам. Не могу понять как преобразовать start_time к дате.
Пробую вывести следующим кодом:
 import pandas as pd
from sqlalchemy import create_engine
from bokeh.models.sources import ColumnDataSource
from bokeh.plotting import figure, show
from datetime import datetime
dtm = lambda x: datetime.fromtimestamp(int(x)).strftime('%H:%M:%S %d.%m.%y')
#sqlite3 = create_engine('sqlite:///test.db', echo=True)
sqlite3 = create_engine('sqlite:///test.db', echo=False)
query = "select start_time, speed_sps FROM  data_1"
#data = pd.read_sql_query(query, sqlite3, coerce_float=True, parse_dates=True)
data = pd.read_sql_query(query, sqlite3, coerce_float=True)
#data["start_time"] = data["start_time"].apply(dtm)
data1 = data.set_index('start_time')
print(data1)
#source_static = ColumnDataSource(data)
source_static = ColumnDataSource(data1)
source = ColumnDataSource(data1)
#print(data['start_time'])
# source_static = ColumnDataSource(data=dict(date=data_list, t1=data_speed, t2=data_speed, t1_returns=[], t2_returns=[]))
ts1 = figure(plot_width=900, plot_height=200)
#ts1.line(x='start_time', y='speed_sps', source=source_static)
ts1.line(data['start_time'], data['speed_sps'], color='navy', alpha=0.5)
#ts1.circle('start_time', 'speed_sps', source=source, size=1, color=None, selection_color="orange")
show(ts1)

data1 вывод:
            speed_sps
start_time          
1499450876       304
1499450876       311
1499450876       308
1499450876       316
1499450876       317
...              ...
1500058896       244
1500058896       313
1500058896       312
1500058896       310
1500058896       311
1500058896       316
1500037934       317
1500033127       319
1500039017       318
1500033127       317
1500033127       313
1500052184       312
1500058896       241
[85 rows x 1 columns]

Получается фигня из вложения. Если преобразовать в дату через dtm, то даты выводится правильно в print(data1) но график открывается пустой. Было бы просто идеально если подскажите как получить график как по ссылке https://bokeh.pydata.org/en/latest/docs/user_guide/tools.html#formatting-tooltip-fields
keodomir
Вопрос слишком сложный или не соответствует разделу?
scidam
Попробуйте следующие изменения:

 ts1 = figure(plot_width=900, plot_height=200, x_axis_type="datetime")


 import datetime
ts1.line(data['start_time'].map(datetime.datetime.fromtimestamp), data['speed_sps'], color='navy', alpha=0.5)
keodomir
К сожалению не работает:
 TypeError: an integer is required (got type str)
'start_time' у меня строка
судя по коду вы предлагаете что-то очень похожее на:
 dtm = lambda x: datetime.fromtimestamp(int(x)).strftime('%H:%M:%S %d.%m.%y')
data = pd.read_sql_query(query, sqlite3, coerce_float=True, parse_dates=True)
data["start_time"] = data["start_time"].apply(dtm)

в чем принципиальная разница?
keodomir
Разобрался, мешал формат, так работает:

 dtm = lambda x: datetime.fromtimestamp(int(x))
data = pd.read_sql_query(query, sqlite3, coerce_float=True, parse_dates=True)
data["start_time"] = data["start_time"].apply(dtm)

Но все равно на графике фигня. Как сделать вывод дат последовательным?
scidam
Добавьте еще где-нибудь перед построением графика сортировку по дате:

 data = data.sort_values(by=['start_time'])
keodomir
Спасибо помогло!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB