我正在使用
hvPlot
和 streamz
在 Panel 应用程序中显示来自 Redis 缓存的实时数据。 hvPlot 将数据点附加到图表,在达到某种缓冲区的限制时,数据将自行滑动,显示最后 X 个数据点。
我不知道这个功能是来自我的
PeriodicDataFrame
还是我的hvPlot情节,但我想明确地(创建用户首选项)为我的PeriodicDataFrame设置行限制,如果可能的话。
这是我的代码:
import json
import pandas as pd
import hvplot.streamz
import holoviews as hv
from panel.widgets import IntSlider
from streamz.dataframe import PeriodicDataFrame
import redis
import panel as pn
pn.extension(sizing_mode="stretch_width")
# Connect to Redis cache
r = redis.Redis()
# Set up callback with streaming data
def sin_data(**kwargs):
# Read the last element from the Redis list
data = r.lindex('random_sin', -1)
if data:
data = json.loads(data)
index = pd.to_datetime(data['timestamp'], unit='ms')
return pd.DataFrame({'var_0': data['var_0'],
'var_1': data['var_1'],
'var_2': data['var_2'],
'var_3': data['var_3'],
'var_4': data['var_4'],
'var_5': data['var_5'],
'var_6': data['var_6'],
'var_7': data['var_7']},
columns=['var_' + str(x) for x in range(8)], index=[index])
df_1 = PeriodicDataFrame(sin_data, interval='100ms')
# Declare plots
line_1 = df_1.hvplot(kind='line', value_label="Sin", width=1200)
# some part about widgets
...
hv.extension('bokeh')
hv.renderer('bokeh').theme = 'caliber'
controls = pn.WidgetBox('# Commands',
...
)
pn.template.FastListTemplate(
site="Panel",
title="PoC",
sidebar=[*controls],
main=[
"POC hvPlot, Bokeh, Panel",
line_1,
]
).servable();
提前致谢。