无法在 Bokeh .rect 字形中按颜色对 ColumnDataSource 数据进行分组

Unable to group ColumnDataSource Data by color in Bokeh .rect glyph

我想根据 .csv 文件中包含字符串的列按颜色对绘图进行分组。 我的印象是 "color = 'ColumnName'" 会起作用。

p.rect(x = range(len(source.data['Project Description'])),
   y = adj_h,
   color= 'Client',
   source = source,
   width = .4,
   height = 'Budget'     
  )

这只是让我的矩形字形显示为黑色轮廓且没有填充颜色。

散景中的颜色是使用颜色映射方案绘制的。首先,您需要设置颜色图,让 Bokeh 知道为哪个对象使用什么颜色。您可以使用字典 colormap = {'Client_1':'red', Client_2:'blue'} 手动设置颜色图,或者如果您可以使用内置 CategoricalColorMapper 函数创建颜色图 colormap = CategoricalColorMapper(palette=palette, factors=list_of_factors).

然后您可以在绘图函数中指定颜色。您可以使用包含所有数据点 colors = [colormap[x] for x in source['Client']] 的所有颜色的列表,然后将颜色传递给图 color=colors。或者你可以让 bokeh 直接在 plot 函数中为你做转换 color={'field': 'Client', 'transform': colormap}


在你的代码中,我会尝试类似

colormap = CategoricalColorMapper(palette=palette, factors=list(set(data['Client'])))

p.rect(x = range(len(source.data['Project Description'])),
   y = adj_h,
   color = {'field': 'Client', 'transform': colormap}',
   source = source,
   width = .4,
   height = 'Budget'     
  )

根据类别数量和数据选择调色板的位置是您的原始数据集。


参考文献:

iris.py - 为数据集中的每个项目手动设置颜色并在图中使用颜色列表的示例。

texas.py - 使用调色板和颜色映射器然后让绘图函数使用 'transform'.

设置颜色的示例