Python 无法在Bokeh.rect图示符中按颜色对ColumnDataSource数据进行分组

Python 无法在Bokeh.rect图示符中按颜色对ColumnDataSource数据进行分组,python,bokeh,Python,Bokeh,我想根据保存.csv文件中字符串的列按颜色对绘图进行分组。 我的印象是“color='ColumnName'”可以 p.rect(x = range(len(source.data['Project Description'])), y = adj_h, color= 'Client', source = source, width = .4, height = 'Budget' ) 这只是让我的矩形图示符显示为黑色轮廓,没有填充颜色。Bokeh中的

我想根据保存.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,它允许Bokeh知道哪个对象使用什么颜色。您可以使用字典
colormap={'Client_1':'red',Client_2:'blue'}
手动设置颜色映射,或者如果您可以使用内置的
CategoricalColorMapper
函数创建颜色映射
colormap=CategoricalColorMapper(调色板=调色板,因子=因子列表)

然后可以在打印功能中指定颜色。您可以使用包含所有数据点的所有颜色的列表
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'     
  )
根据类别数量选择调色板,数据为原始数据集


参考资料:

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


-示例使用调色板和颜色映射器,然后让绘图功能使用
'transform'

设置颜色欢迎使用SO。请阅读本文并遵循其中的指导原则,用足够的信息来描述和再现您的问题,以改进您的问题。很高兴帮助@Jamm6,欢迎使用Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。