python - 根据 Bokeh 实时绘图中的值更改点颜色

标签 python plot time-series real-time bokeh

我在实验中使用 Bokeh 来实时绘制数据,该库提供了一种方便的方法来做到这一点。

这是我完成此任务的代码片段:

# do the imports 
import pandas as pd
import numpy as np
import time
from bokeh.plotting import *
from bokeh.models import ColumnDataSource

# here is simulated fake time series data
ts = pd.date_range("8:00", "10:00", freq="5S")
ts.name = 'timestamp'
ms = pd.Series(np.arange(0, len(ts)), index=ts)
ms.name = 'measurement'
data = pd.DataFrame(ms)
data['state'] = np.random.choice(3, len(ts))
data['observation'] = np.random.choice(2, len(ts))
data.reset_index(inplace=True)
data.head()

这是数据的样子。 simulated data

接下来我使用了下面的片段将数据实时推送到服务器

output_server("observation")

p = figure(plot_width=800, plot_height=400, x_axis_type="datetime")
x = np.array(data.head(2).timestamp, dtype=np.datetime64)
y = np.array(data.head(2).observation)
p.diamond_cross(x,y, size=30, fill_color=None, line_width=2,      name='observation')
show(p)

renderer = p.select(dict(name="observation"))[0]
ds = renderer.data_source

for mes in range(len(data)):

    x = np.append(x, np.datetime64(data.loc[mes].timestamp))
    y = np.append(y, np.int64(data.loc[mes].observation))
    ds.data["x"] = x
    ds.data["y"] = y

    ds._dirty = True
    cursession().store_objects(ds)
    time.sleep(.1)

这会产生非常好的结果,但是我需要根据值更改每个数据点的颜色。

在这种情况下,条件是状态变量,它具有三个值——0、1 和 2。所以我的数据应该能够反射(reflect)这一点。 我花了几个小时试图弄明白(诚然,我是 Bokeh 的新手),我们将不胜感激任何帮助。

my data time series

最佳答案

当您推送数据时,您必须按所需颜色将组分开,然后提供相应的颜色作为调色板。在 https://github.com/bokeh/bokeh/issues/1967 有一个更长的讨论,有几个变体。 ,例如 2 月 28 日发布的简单 boteh.charts 点示例 bryevdv:

cat = ['foo', 'bar', 'baz']
xyvalues=dict(x=[1,4,5], y=[2,7,3], z=[3,4,5])
dots = Dot(
    xyvalues, cat=cat, title="Data", 
    ylabel='FP Rate', xlabel='Vendors',
    legend=False, palette=["red", "green", "blue"])
show(dots)

请记住阅读并遵守 https://stackoverflow.com/help/how-to-ask 上的发帖指南;我在第一次尝试搜索“Bokeh 'change color' plot”时发现了这个和其他几个可能有用的结果。如果这些都不能解决您的问题,您需要将您正在做的事情与已有的答案区分开来。

关于python - 根据 Bokeh 实时绘图中的值更改点颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935525/

相关文章:

python - 如何在不丢失大于 32 位整数的情况下将保存在 Pandas 中的数据帧作为 HDF5 文件加载到 R 中?

python - 满足条件时重置列表

python - pandas DataFrame 的 100% 面积图

javascript - 时间序列折线图与轴不同步

python - 预取相关的django

python - 引用目录树中文件的正确方法

r - R 中的绘图函数在不调用 legend() 的情况下生成图例

linux - 如何在ggplot中绘制两个尺度的一些数据

SAS:插入空白行

machine-learning - 使用机器学习根据传感器数据进行故障预测