除了使用更新功能显示的数据之外,还可以更改绘图的其他方面。例如,要更改标题文本以匹配 bin 宽度,可以执行以下操作:
# Change plot title to match selection bin_width = binwidth_select.value p.title.text = \'Delays with %d Minute Bin Width\' % bin_width在 Bokeh 中还有许多其他类型的交互,但是现在,我们的三个控件允许用户在图表上“玩”很多!
把它们放在一起我们的互动图表的所有元素都已到位。 我们有三个必要的函数:make_dataset,make_plot和 update 来根据控件和小部件本身改变绘图。 我们通过定义布局将所有这些元素连接到一个页面上。
from bokeh.layouts import column, row, WidgetBox from bokeh.models import Panel from bokeh.models.widgets import Tabs # Put controls in a single element controls = WidgetBox(carrier_selection, binwidth_select, range_select) # Create a row layout layout = row(controls, p) # Make a tab with the layout tab = Panel(child=layout, title = \'Delay Histogram\') tabs = Tabs(tabs=[tab])我将整个布局放在一个选项卡上,当我们完成一个完整的应用程序时,我们可以将每个绘图放在一个单独的选项卡上。 所有这些工作的最终结果如下:
在 Bokeh 中创建交互式可视化应用程序接下来将重点介绍 Bokeh 应用程序的结构,而不是绘图细节,但后续会提供所有内容的完整代码。我们将继续使用 NYCFlights13 数据集,这是 2013年 纽约 3 个机场的航班的真实航班信息集合。
要自己运行完整的应用程序,首先请确保安装了Bokeh(使用pip install bokeh)。
其次,请在公众号『Python数据之道』后台回复 “code”,获取本项目的源代码地址,然后从该地址中下载 bokeh_app.zip 文件夹,解压缩,打开目录中的命令窗口,然后键入 bokeh serve --show bokeh_app 。 这将设置一个本地 Bokeh 服务器并在浏览器中打开该应用程序。
最终的产品在进入细节之前,让我们来看看我们的目标是什么,这样可以看到这些产品是如何组合在一起的。 以下是一个简短的剪辑,展示了我们如何与整个仪表板进行交互:
在这里,我在浏览器中使用 Bokeh 应用程序(在 Chrome 的全屏模式下),该应用程序在本地服务器上运行。 在顶部,我们看到许多选项卡,每个选项卡包含应用程序的不同部分。 仪表板的初衷是,虽然每个选项卡可以独立存在,但我们可以将它们中的许多连接在一起,以便能够完整地探索数据。 该视频显示了我们可以使用 Bokeh 制作的图表范围,从直方图和密度图,到我们可以按列排序的数据表,再到完全交互式地图。 除了我们可以在 Bokeh 中创建的图形范围之外,使用 Bokeh 库的另一个好处是交互。 每个选项卡都有一个交互元素,使用户可以访问数据并进行自己的发现。 根据经验,在探索数据集时,人们喜欢自己探索,我们可以允许他们通过各种控制选择和筛选数据。
现在我们已经了解了我们的目标,让我们来看看如何创建一个 Bokeh 应用程序。 强烈建议您自己下载代码来运行(在公众号『Python数据之道』后台回复 “code”,获取本项目的源代码地址)!
Bokeh 应用程序的文件结构在编写任何代码之前,为我们的应用程序建立一个框架很重要。 在任何项目中,很容易被代码带走,很快就会丢失在一堆半完成的脚本和不合适的数据文件中,因此我们希望事先为我们所有的代码和数据创建一个结构。 该结构将帮助我们跟踪应用程序中的所有元素,并在出现不可避免的错误时协助调试。 此外,我们可以将此框架重新用于未来的项目,因此我们在规划阶段的初始投资将获得回报。