python 动态曲线更新x轴_高效动态曲线更新的概念证明?

为了证明概念,我制作了一个由四支OHLC蜡烛组成的Bokeh图。在

我想扩展演示动画的情节,使目前的烛台将移动和更新,以回应其OHLC数据的变化。重要的一点是,只有组件(glyphs?)最后的蜡烛应该更新,而不是整个情节。在

其目的是演示一种计算量很轻的方法,可以放大到一个更大的图表中,其中包含许多蜡烛,并且非常频繁地更新“live”蜡烛。在

有没有人能在代码中概述或演示如何实现这一点?在

谢谢你。在

Jupyter笔记本电脑Python代码(包括39秒的合成滴答数据,以便于4 x 10秒烛台动画):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)

88be03ee0db863a13f4e73c6ca385c76.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值