我正在处理一些库存(时间序列)数据。 我正在使用Bokeh可视化所述数据。
我试图可视化收盘价(存储在名为Close
的列中)。
现在还有另一列Bool
,该列具有布尔数据(0或1),这些数据基于我对数据所做的某些计算。
我必须对期末股票进行绘图,以使折线图中的颜色在Bool
列的两个值1之间改变。
这是Bool
列的某些值的真实示例。
0
1
0
0
1
1
0
1
1
0
0
1
因此,Close
图将为蓝色,除了Bool
列中两个1之间的0。对于这些情况,图必须为红色。
我不太习惯使用Bokeh,因此,如果您能在这里帮助我,那就太好了
答案 0 :(得分: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)
结果: