用Bokeh绘制时间序列

问题描述 投票:0回答:1

我正在研究一些股票(时间序列)数据。我正在使用Bokeh来显示所述数据。

我试图想象关闭股票价格(存储在名为Close的列中)。现在还有另一个列Bool,它基于我对数据进行的某些计算得到了布尔数据(0或1)。

我必须绘制Closing股票,使得线条图中的颜色改变Bool列中两个值1之间的颜色。这是Bool列的一些值的真实示例。

0
1
0
0
1
1
0
1
1
0
0
1

所以Close图将是蓝色,除了Bool列中两个1之间的0。对于这些情况,情节必须是红色的。

我不太习惯使用Bokeh,所以如果你可以帮助我在这里会很棒

python plot data-visualization bokeh
1个回答
0
投票

你的意思是这样的吗? (适用于Bokeh v1.0.4)

import pandas as pd
import numpy as np
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, show

bools = [0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1]
colors = ['red' if bool == 0 else 'blue' for bool in bools]

df = pd.DataFrame(data = np.random.rand(len(bools), 1), columns = ['close_price'], index = pd.date_range(start = '01-01-2015', periods = len(bools), freq = 'd'))

xs, ys = [], []
for xs_value, ys_value in zip(df.index.values, df['close_price'].values):
    if len(xs) > 0 and len(ys) > 0:
        xs.append([xs[-1][1], xs_value])
        ys.append([ys[-1][1], ys_value])
    else:
        xs.append([xs_value, xs_value])
        ys.append([ys_value, ys_value])

source = ColumnDataSource(dict(xs = xs, ys = ys, color = colors))

p = figure(width = 500, height = 300, x_axis_type = "datetime")
p.multi_line(xs = 'xs',
             ys = 'ys',
             color = 'color',
             source = source,
             line_width = 3)
show(p)

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.