Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Bokeh概念验证高效动态绘图更新?_Python_Animation_Plot_Bokeh_Candlestick Chart - Fatal编程技术网

Python Bokeh概念验证高效动态绘图更新?

Python Bokeh概念验证高效动态绘图更新?,python,animation,plot,bokeh,candlestick-chart,Python,Animation,Plot,Bokeh,Candlestick Chart,作为概念验证的演示,我创建了一个由四支OHLC蜡烛组成的Bokeh图 我想扩展演示,以动画的情节,使当前的烛台将作出移动和更新,以响应其OHLC数据的变化。重要的一点是,只应更新最终蜡烛的组件(轮廓?),而不应更新整个绘图 其目的是演示一种计算轻量级的方法,该方法可以通过许多蜡烛和对“实时”蜡烛的非常频繁的更新放大到更大的图表 是否有人能够用代码概述或演示如何实现这一点 谢谢 Jupyter notebook Python代码(包括39秒的合成滴答数据,以促进4 x 10秒烛台动画): 从ipy

作为概念验证的演示,我创建了一个由四支OHLC蜡烛组成的Bokeh图

我想扩展演示,以动画的情节,使当前的烛台将作出移动和更新,以响应其OHLC数据的变化。重要的一点是,只应更新最终蜡烛的组件(轮廓?),而不应更新整个绘图

其目的是演示一种计算轻量级的方法,该方法可以通过许多蜡烛和对“实时”蜡烛的非常频繁的更新放大到更大的图表

是否有人能够用代码概述或演示如何实现这一点

谢谢

Jupyter notebook Python代码(包括39秒的合成滴答数据,以促进4 x 10秒烛台动画):

从ipywidgets导入交互
将numpy作为np导入
从bokeh.plotting导入图形,输出\ U笔记本,显示
将日期时间导入为dt
作为pd进口熊猫
从数学导入pi
datum=dt.datetime.now()
时间δ=dt.timedelta(秒=1)
勾选数据=[(基准面+(时间增量*1),20),
(基准面+(时间δ*2),19.67603177022472),
(基准面+(时间δ*3),20.431878609290592),
(基准面+(时间δ*4),20.2057631687243),
(基准面+(时间δ*5),20.715609070433032),
(基准面+(时间δ*6),20.722416975732024),
(基准面+(时间δ*7),20.722027468712426),
(基准面+(时间δ*8),20.728022489796615),
(基准面+(时间δ*9),20.70996968619282),
(基准面+(时间增量*10),20.70096021947874),
(基准面+(时间δ*11),20.729546647699372),
(基准面+(时间δ*12),20.759081440837274),
(基准面+(时间增量*13),20.823807346441097),
(基准面+(时间增量*14),20.610018797947472),
(基准面+(时间δ*15),20.591932124168064),
(基准面+(时间δ*16),20.584175853951805),
(基准面+(时间δ*17),20.563650527527987),
(基准面+(时间δ*18),20.617504106758794),
(基准面+(时间δ*19),20.42010872326373),
(基准面+(时间增量*20),20.391860996799267),
(基准面+(时间δ*21),20.3913190739894),
(基准面+(时间δ*22),20.34308794391099),
(基准面+(时间增量*23),20.222577858590662),
(基准面+(时间增量*24),20.47050754458162),
(基准面+(时间δ*25),20.83193618858914),
(基准面+(时间δ*26),20.80978509373571),
(基准面+(时间δ*27),20.80917543057461),
(基准面+(时间δ*28),20.859506511541262),
(基准面+(时间δ*29),20.596402987349492),
(基准面+(时间增量*30),20.644024466795),
(基准面+(时间增量*31),20.58183881183424),
(基准面+(时间增量*32),20.59023861538722),
(基准面+(时间增量*33),20.454961133973477),
(基准面+(时间增量*34),20.495334383308776),
(基准面+(时间δ*35),20.483818523599044),
(基准面+(时间增量*36),20.593964334705078),
(基准面+(时间增量*37),20.91518908025538),
(基准面+(时间δ*38),20.87942217480398),
(基准面+(时间增量*39),20.772392419854697)]
#准备将分形记号数据转换为烛台
烛光δ=dt.时间δ(秒=10)
蜡烛关闭时间=基准+蜡烛增量
蜡烛_数据=[]
#初始化
op,hi,lo,cl=0,0,0,0
#将滴答声转换为烛台
对于勾选数据中的(dtval,val):
如果蜡烛关闭时间df.c
#烛光宽度
w=10*500
TOOLS=“平移、滚轮缩放、框缩放、重置、保存”
p=图形(x轴类型=“日期时间”,工具=工具,绘图宽度=500,标题=“四根蜡烛”)
p、 xaxis.major_标签_方向=pi/4
p、 网格。网格线α=0.3
#灯芯
p、 段(df.d、df.h、df.d、df.l、color=“#000000”)
#上身
p、 矩形(df.d[inc],mids[inc],w,span[inc],fill#u color=“#09ff00”,line#u color=“#09ff00”)
#下半身
p、 矩形(df.d[dec],mids[dec],w,span[dec],fill#u color=“#ff0000”,line#u color=“#ff0000”)
输出_笔记本()
表演(p)

我创建了一个超越这个问题的概要,以实现其意图;演示Bokeh修补和流式OHLC图表

from ipywidgets import interact
import numpy as np
from bokeh.plotting import figure, output_notebook, show
import datetime as dt
import pandas as pd
from math import pi

datum = dt.datetime.now()
time_delta = dt.timedelta(seconds=1)

tick_data = [(datum + (time_delta*1), 20),
 (datum + (time_delta*2), 19.67603177022472),
 (datum + (time_delta*3), 20.431878609290592),
 (datum + (time_delta*4), 20.20576131687243),
 (datum + (time_delta*5), 20.715609070433032),
 (datum + (time_delta*6), 20.722416975732024),
 (datum + (time_delta*7), 20.722027468712426),
 (datum + (time_delta*8), 20.728022489796615),
 (datum + (time_delta*9), 20.70996968619282),
 (datum + (time_delta*10), 20.70096021947874),
 (datum + (time_delta*11), 20.729546647699372),
 (datum + (time_delta*12), 20.759081440837274),
 (datum + (time_delta*13), 20.823807346441097),
 (datum + (time_delta*14), 20.610018797947472),
 (datum + (time_delta*15), 20.591932124168064),
 (datum + (time_delta*16), 20.584175853951805),
 (datum + (time_delta*17), 20.563650527527987),
 (datum + (time_delta*18), 20.617504106758794),
 (datum + (time_delta*19), 20.42010872326373),
 (datum + (time_delta*20), 20.391860996799267),
 (datum + (time_delta*21), 20.3913190739894),
 (datum + (time_delta*22), 20.34308794391099),
 (datum + (time_delta*23), 20.2225778590662),
 (datum + (time_delta*24), 20.47050754458162),
 (datum + (time_delta*25), 20.83193618858914),
 (datum + (time_delta*26), 20.80978509373571),
 (datum + (time_delta*27), 20.80917543057461),
 (datum + (time_delta*28), 20.859506511541262),
 (datum + (time_delta*29), 20.596402987349492),
 (datum + (time_delta*30), 20.644024454266795),
 (datum + (time_delta*31), 20.58183881183424),
 (datum + (time_delta*32), 20.59023861538722),
 (datum + (time_delta*33), 20.454961133973477),
 (datum + (time_delta*34), 20.495334383308776),
 (datum + (time_delta*35), 20.483818523599044),
 (datum + (time_delta*36), 20.593964334705078),
 (datum + (time_delta*37), 20.91518908025538),
 (datum + (time_delta*38), 20.87942217480398),
 (datum + (time_delta*39), 20.772392419854697)]


#Prepare to convert fractal tick data into candlesticks
candle_delta = dt.timedelta(seconds=10)
candle_close_time = datum + candle_delta
candle_data = []   

#Initialise
op, hi, lo, cl = 0, 0, 0, 0

#Convert ticks to candlesticks
for (dtval, val) in tick_data:
    if candle_close_time < dtval:
        #store the completed candle
        candle_data.append((candle_close_time, op, hi, lo, cl))        
        #increment to the next candle
        candle_close_time += candle_delta
        #Reset
        op, hi, lo, cl = 0, 0, 0, 0

    if dtval <= candle_close_time and op==0:
        #set initial values
        op, hi, lo, cl = val, val, val, val
    elif dtval <= candle_close_time and op!=0:
        #update values as appropriate
        hi = val if val > hi else hi
        lo = val if val < lo else lo
        cl = val

    #final tick
    if dtval == tick_data[-1][0]:
        #store the completed candle
        candle_data.append((candle_close_time, op, hi, lo, cl))

#print(str(candle_data))

df = pd.DataFrame(candle_data, columns=list('dohlc'))

#For rectangle positioning
mids = (df.o + df.c)/2
#Rectangle height
spans = abs(df.c-df.o)
#Detect up / down candle body
inc = df.c > df.o
dec = df.o > df.c
#Candle width
w = 10 * 500

TOOLS = "pan,wheel_zoom,box_zoom,reset,save"
p = figure(x_axis_type="datetime", tools=TOOLS, plot_width=500, title = "Four Candles")

p.xaxis.major_label_orientation = pi/4
p.grid.grid_line_alpha=0.3

#Wick
p.segment(df.d, df.h, df.d, df.l, color="#000000")
#Up body
p.rect(df.d[inc], mids[inc], w, spans[inc], fill_color="#09ff00", line_color="#09ff00")
#Down body
p.rect(df.d[dec], mids[dec], w, spans[dec], fill_color="#ff0000", line_color="#ff0000")


output_notebook()
show(p)