好吧,我创建了一个条形图,现在我想根据其在y轴上的值指定条形的颜色。简化-如果值是正数,则条形图应为红色,如果值是负数,则条形图应为蓝色。
对我来说,只能沿x轴更改颜色,而不能沿y轴更改颜色。
from bokeh.palettes import plasma
source = ColumnDataSource(data={'date' : pd.to_datetime(df_data['date'], format='%Y-%m'), 'values' : df_data['values'], 'color' : plasma(256)})
p = figure(x_axis_label='time',
x_axis_type='datetime',
y_axis_label='diff',
tools = [hover]
toolbar_location=None
title="title")
p.vbar(x = 'date',top = 'values', source=source, width=timedelta(days=20), color = 'color')
我发现了以下示例: https://docs.bokeh.org/en/latest/docs/user_guide/categorical.html
但是我需要根据它们的值(不取决于其数量)来区分或着色这些条。我知道我的榜样没有道理,但我只想证明我的期望是什么。
答案 0 :(得分:0)
好吧,我通过取消熊猫的cut功能找到了自己的解决方案。
import pandas as pd
import numpy as np
values = array(df_data['values']).values)
bins = [np.NINF, 0, np.inf]
categories = pd.cut(values, bins, right=False)
palette = ['blue', 'red']
colors = []
for i in categories.codes:
colors.append[palette[i]]
# Now i can add this column to my ColumnDataSource:
source = ColumnDataSource(data={'date' : pd.to_datetime(df_data['date'], format='%Y-%m'), 'values' : df_data['values'], 'color' : colors}
p.vbar(x = 'date',top = 'values', source=source, width=timedelta(days=20), color = 'colors')
当然,这就像“快速而肮脏的”解决方案一样,并且有足够的优化空间。