如何让 Bokeh ColorBar 显示最小值和最大值?

How do I get a Bokeh ColorBar to show the min and max value?

我正在使用 Bokeh 制作气泡图,并希望 ColorBar 显示最小值和最大值。给出的数据看起来像这样

In[23]: group_counts.head()

    cyl yr  counts  size
0   3   72  1       0.854701
1   3   73  1       0.854701
2   3   77  1       0.854701
3   3   80  1       0.854701
4   4   70  7       5.982906

我正在使用

生成绘图
x_col = 'cyl'
y_col = 'yr'
color_transformer = transform.linear_cmap('counts', Inferno256, 
                                          group_counts.counts.min(), 
                                          group_counts.counts.max())
color_bar = ColorBar(color_mapper=color_transformer['transform'],
                     location=(0, 0))
source = ColumnDataSource(data=group_counts)
p = plotting.figure(x_range=np.sort(group_counts[x_col].unique()),
                    y_range=np.sort(group_counts[y_col].unique()),
                    plot_width=400, plot_height=300,
                    x_axis_label=x_col, y_axis_label=y_col)
p.add_layout(color_bar, 'right')
p.scatter(x=x_col, y=y_col, size='size', color=color_transformer,
          source=source)
plotting.show(p)

请注意,颜色栏上的最小值和最大值没有标记。如何强制颜色条标记这些值?

您可以使用位于 bokeh.models 下的 FixedTicker class 来完成此操作。它旨在用于,

Generate ticks at fixed, explicitly supplied locations.

要提供最小和最大数据值,请指定所需的刻度值,然后使用 ticker 关键字参数将该对象传递给 ColorBar

mn = group_counts.counts.min()
mx = group_counts.counts.max()
n_ticks = 5  # how many ticks do you want?
ticks = np.linspace(mn, mx, n_ticks).round(1)  # round to desired precision 
color_ticks = FixedTicker(ticks=ticks)

color_bar = ColorBar(color_mapper=color_transformer['transform'],
                     location=(0, 0), 
                     ticker=color_ticks,  # <<< pass ticker object
                    )

如果您想要更奇特的东西,bokeh.models.tickers documentation 中目前描述了 14 种不同的代码(搜索 Ticker(** 以在不同选项之间快速跳转)。