Scatter对象和figure.scatter方法之间的区别

时间:2017-07-13 10:16:11

标签: python-3.x bokeh interactive

我有以下与这两个图有关的问题:

图1:

output_notebook()
scatter = Scatter(df_b, x='log_umsatz', y='log_fte', color='target', legend="top_right")
show(scatter)

enter image description here

图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)

enter image description here

如您所见,我使用散景生成了两个散点图。在第二张图中,我尝试介绍p.legend.click_policy="hide"的一些交互性。我有两个问题:交互性不起作用,第二个例子中的图例和颜色编码丢失了。怎么会?我希望图1和图2是相同的。

1 个答案:

答案 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"