在Bokeh中,标记alpha是否可能随指定字段中的值而变化
例如,要按字段更改颜色和标记,请执行以下操作:
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
from bokeh.transform import factor_cmap,factor_mark
df = some dataframe
palette = ['#440154', '#404387', '#29788E', '#22A784', '#79D151', '#FDE724']
bok_sym = ['circle','asterisk','square_x','circle_x','diamond','hex']
cat_lst = list(df['cat_field'].unique())
df_cds = ColumnDataSource(data=df)
fig = figure(some kwargs)
fig.scatter(x='x',y='y',
source = df_cds,
marker = factor_mark('cat_field',bok_sym,cat_lst)
fill_color = factor_cmap('cat_field',palette,cat_lst),
)
show(fig)
对于alpha,似乎没有类似的显式函数,但是bokeh.transform确实提供了一个通用的转换
https://docs.bokeh.org/en/latest/docs/reference/transform.html
我已尝试添加以下内容:
from bokeh.transform import transform
alph_lst = [0.2,0.9,0.9,0.9,0.9,0.9]
fig.scatter(x='x',y='y',
source = df_cds,
marker = factor_mark('cat_field',bok_sym,cat_lst)
fill_color = factor_cmap('cat_field',palette,cat_lst),
fill_alpha = transform('cat_field',dict(zip(cat_lst,alph_lst))),
)
但是没有成功
干杯
编辑:
我会注意到,我已经(未成功)尝试将透明度作为十六进制代码的一部分进行传递:
调色板=['#44015433'、'#404387E6'、'#29788EE6'、'#22A784E6'、'#79D151E6'、'#FDE724E6']
正如您在问题中所述,您完全可以通过自定义转换来实现这一点。在我看来,这些代码有点麻烦,但希望这段代码能把它弄清楚
基本上,您需要三个步骤来创建自定义javascript函数并将其应用于bokeh中的字段名:
CustomJSTransform
对象中,将必要的参数作为字典提供给它。在本例中,我用python构建了factor -> alpha
映射,并将其传递到javascript中。我们使用了vfunc
参数,因为我们希望将此转换应用于数据中类别的每个实例李>p.scatter
的调用中,使用transform
函数将指定的列名绑定到自定义转换。在这种情况下alpha = transform("cat_field", categorical_alpha_transformer)
相关问题 更多 >
编程相关推荐