我有以下与这两个图有关的问题:
图1:
output_notebook()
scatter = Scatter(df_b, x='log_umsatz', y='log_fte', color='target', legend="top_right")
show(scatter)
图2
output_notebook()
scatter = figure(plot_width=500, plot_height=500)
scatter.scatter(x=df_b['log_umsatz'], y=df_b['log_fte'], color=df['target'])
p.legend.location = "top_left"
p.legend.click_policy="hide"
show(scatter)
如您所见,我使用散景生成了两个散点图。在第二张图中,我尝试介绍p.legend.click_policy="hide"
的一些交互性。我有两个问题:交互性不起作用,第二个例子中的图例和颜色编码丢失了。怎么会?我希望图1和图2是相同的。
答案 0 :(得分:2)
您的主要问题是您使用的是图1 Scatter
这是一个Bokeh Charts模型。 Bokeh Charts是一个用于绘制数据的高级库,可以在幕后为您进行大量的数据处理和图表格式化。在图2中,您使用Bokeh字形来创建绘图,因此您需要更清楚地了解您希望它做什么。
修复你的代码我可以生成与原始Scatter相同的图形。
cds = ColumnDataSource(df_b)
color_mapper = CategoricalColorMapper(
palette=['red', 'green'], factors=[0, 1])
scatter = figure(plot_width=500, plot_height=500)
scatter.circle(x='log_umsatz', y='log_fte',
color={'field': 'target', 'transform': color_mapper}, alpha=0.5,
source=cds, legend='target')
scatter.legend.location = "top_right"
如您所见,我们需要调用多个其他Bokeh对象。 ColumnDataSource
用于存储pandas数据,CategoricalColorMapper
用于将颜色映射到因子。
现在为情节添加交互式图例有点复杂。现在,Bokeh交互式图例基于每个字形工作。也就是说,每个字形必须分别绘制为难以处理。您可以阅读更多相关信息here,这里有一个快速演示来帮助您。
scatter = figure(plot_width=500, plot_height=500)
scatter.circle(x=[1, 2, 3], y=[1, 2, 3], color='red', legend='0', alpha=0.5)
scatter.circle(x=[4, 5], y=[4, 5], color='green', legend='1', alpha=0.5)
scatter.legend.location = "top_right"
scatter.legend.click_policy = "hide"