Bokeh:我如何直接访问ColorMapper中的颜色?

3

我在 Bokeh 2.3.0 中使用 LinearColorMapper 将值映射到绘图中的特定颜色。这只是一个简单的示例:

import pandas as pd
from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, LinearColorMapper
from bokeh.layouts import layout

plot1 = figure(plot_width=1000, plot_height=250)

df = pd.DataFrame({"ID":[0, 1, 2, 3, 4, 5, 6, 7], 
                   "Value1":[0, 100, 200, 300, 400, 500, 600, 700], 
                   "Color": [0, 1, 0, 1, 2, 2, 3, 3] # Those somehow correspond to the categories, but will change during runtime
                  })
source = ColumnDataSource(df)

possible_categories = ["A", "B", "C", "D"]

cmap = LinearColorMapper(palette="Turbo256", low = 0, high = len(possible_categories))
                        
circle = plot1.circle(x='ID', y='Value1', source=source, 
                      fill_color={"field":'Color', "transform":cmap}, 
                      line_color={"field":'Color', "transform":cmap})


layout_ = layout([[plot1]])
curdoc().add_root(layout_)

不过我想知道是否有可能直接从我创建的中“手动”访问颜色?我想传递一个值给cmap,并获取颜色或十六进制颜色代码或类似的东西。就像这样(当然不起作用,但说明了我的想法):

for categ, num in enumerate(possible_categories):

    color = cmap.get_colorcode_to_the_following_value(num)
    print(f"Color of Category {possible_categories[categ]}: {color}")

输出结果如下:

Color of Category A: ColorCodeXXX
Color of Category B: ColorCodeXXX
Color of Category C: ColorCodeXXX
Color of Category D: ColorCodeXXX

我相信这种方法是有效的,但我详细查阅了Bokeh的参考文献,没有找到类似的内容。

1个回答

2
LinearColorMapper执行的颜色映射实际上是在浏览器端的JavaScript中执行的。该信息从未在Python中计算或可用。如果您需要此信息,则需要手动映射和设置图形的颜色,而不使用Bokeh的LinearColorMapper

谢谢你提供的信息。当你说“手动设置字形的颜色并绘制地图”时,是指在我的ColumnDataSource中添加一个额外的列,用于保存每个样本的ColorValue,并选择一个值到颜色的映射吗? - undefined
是的,没错。在CDS中多加一列颜色,这些颜色可以通过Python计算得出(因此可以在Python中访问)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接