Bokeh简介
Bokeh 是一个用于创建交互式和可视化丰富的 web 应用程序的 Python 库。它专为需要在现代 Web 浏览器中呈现复杂数据可视化的场景而设计,旨在帮助数据科学家、分析师和开发人员以简洁的方式创建高效和动态的数据展示。
核心特性
- 交互式可视化:
- Bokeh 提供强大的交互功能,允许用户通过缩放、平移、选择和工具提示等操作来探索数据。
- 支持在图表中添加自定义的交互控件,如滑块、下拉菜单和按钮。
- 多种图表类型:
- 提供多种基础和高级图表类型,包括线图、散点图、条形图、直方图、热力图、网格图等。
- 支持复合图表和复杂布局,用户可以组合多个图表创建仪表板。
- 高性能渲染:
- Bokeh 使用 HTML5 Canvas 技术进行图形渲染,确保在处理大型数据集时的高性能。
- 支持 WebGL 加速,以进一步提升渲染速度和性能。
- 与 Python 生态系统集成:
- 与 Pandas、NumPy、SciPy 等常用 Python 数据分析库无缝集成。
- 支持从 Pandas DataFrame 直接创建图表,简化数据处理和可视化流程。
- 自定义和扩展性:
- 提供丰富的自定义选项,用户可以调整图表的样式、颜色、标签和轴等细节。
- 支持用户定义的 JavaScript 回调函数,实现更复杂的交互和动态行为。
- Web 应用集成:
- Bokeh Server 允许用户将可视化嵌入到交互式 web 应用程序中,支持实时数据更新和用户交互。
- 提供与 Flask、Django 等 web 框架的集成选项。
应用场景
- 数据探索与分析:
- 支持数据科学家和分析师进行交互式数据探索,帮助快速发现数据中的趋势和异常。
- 适用于需要动态调整和深入分析的场景。
- 仪表板和报告:
- 用于创建交互式仪表板和报告,帮助决策者和业务用户直观地理解数据。
- 提供高质量的视觉效果,适合在企业环境中展示和共享。
- 实时数据可视化:
- 支持实时数据流的可视化,适用于监控和分析动态变化的数据。
- 提供高性能的渲染和更新机制,确保实时数据的流畅展示。
- 教育和教学:
- 用于教学数据可视化技术和工具,帮助学生通过实践掌握可视化技能。
- 提供简单易用的接口,适合课堂演示和实验项目。
Bokeh的使用
Bokeh是一个用于创建交互式、可视化数据的Python库,特别适合在Web浏览器中呈现。以下是Bokeh的基本使用教程,涵盖安装、创建简单图表、添加交互功能以及在Jupyter Notebook中使用Bokeh。
安装Bokeh
首先,确保你已经安装了Bokeh库。可以使用pip或conda进行安装:
# 使用pip安装 pip install bokeh # 使用conda安装 conda install bokeh
创建简单图表
Bokeh提供了一些简单的函数来快速创建基本图表。以下是一个创建简单折线图的示例:
from bokeh.plotting import figure, show, output_file # 创建输出文件 output_file("line.html") # 创建一个新的图形对象 p = figure(title="Simple Line Example", x_axis_label='x', y_axis_label='y') # 添加线到图形对象 p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], legend_label="Line", line_width=2) # 显示结果 show(p)
使用ColumnDataSource
ColumnDataSource是Bokeh中用于管理数据的对象,可以用于创建更加复杂和交互式的图表:
from bokeh.plotting import figure, show from bokeh.models import ColumnDataSource # 创建数据源 data = {'x_values': [1, 2, 3, 4, 5], 'y_values': [6, 7, 2, 4, 5]} source = ColumnDataSource(data=data) # 创建图形对象 p = figure(title="Scatter Plot Example", x_axis_label='x', y_axis_label='y') # 添加散点图 p.circle('x_values', 'y_values', size=10, color="navy", alpha=0.5, source=source) # 显示结果 show(p)
添加交互工具
Bokeh允许添加多种交互工具,如缩放、平移、悬停工具等:
from bokeh.plotting import figure, show from bokeh.models import HoverTool # 创建图形对象 p = figure(title="Interactive Plot Example", x_axis_label='x', y_axis_label='y', tools="pan,wheel_zoom,box_zoom,reset") # 添加悬停工具 hover = HoverTool() hover.tooltips = [("X", "@x_values"), ("Y", "@y_values")] p.add_tools(hover) # 添加线 p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], legend_label="Line", line_width=2) # 显示结果 show(p)
在Jupyter Notebook中使用Bokeh
在Jupyter Notebook中使用Bokeh需要进行一些设置,以便图表能够正确显示:
from bokeh.plotting import figure, show, output_notebook # 设置Bokeh在Notebook中输出 output_notebook() # 创建图形对象 p = figure(title="Notebook Example", x_axis_label='x', y_axis_label='y') # 添加线 p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], legend_label="Line", line_width=2) # 显示结果 show(p)
使用Bokeh服务器
Bokeh服务器允许创建动态和交互式的Web应用。以下是一个简单的Bokeh服务器应用示例:
from bokeh.io import curdoc from bokeh.models import ColumnDataSource from bokeh.plotting import figure from bokeh.layouts import column from bokeh.models.widgets import Slider # 创建数据源 source = ColumnDataSource(data=dict(x=[1, 2, 3, 4, 5], y=[6, 7, 2, 4, 5])) # 创建图形对象 p = figure(title="Bokeh Server Example", x_axis_label='x', y_axis_label='y') p.line('x', 'y', source=source) # 创建滑块 slider = Slider(start=0, end=10, value=1, step=0.1, title="Multiplier") # 更新函数 def update(attr, old, new): factor = slider.value new_y = [y * factor for y in source.data['y']] source.data = dict(x=source.data['x'], y=new_y) # 绑定更新函数到滑块 slider.on_change('value', update) # 布局 layout = column(p, slider) # 添加到文档 curdoc().add_root(layout)
要运行这个Bokeh服务器应用,需要在命令行中执行以下命令:
bokeh serve --show script_name.py
将script_name.py替换为你的Python脚本的名称。
Bokeh与polt.ly的对比
Bokeh和Plotly都是流行的Python可视化库,用于创建交互式图表和数据可视化。虽然它们在功能上有一些重叠,但它们在设计理念、特性和使用场景上也有显著的区别。
设计理念
- Bokeh:
- 主要用于创建交互式Web可视化。
- 设计上更注重数据的流式处理和实时更新。
- 提供了一个服务器端(Bokeh Server)用于创建动态和交互式Web应用。
- Plotly:
- 以创建交互式图表为目标,适用于Web和Jupyter Notebook。
- 提供了丰富的预定义图表类型和自定义能力。
- 兼具离线和在线模式,支持在Plotly平台上共享和发布图表。
用户界面和体验
- Bokeh:
- 提供灵活的低级API,允许用户细致控制图表的各个方面。
- 支持通过Bokeh Server进行复杂的交互式应用开发。
- 需要一定的代码编写来定义图表和交互行为。
- Plotly:
- 提供了直观的高层API,易于快速创建常见图表。
- 有大量的内置样式和主题,用户界面更加友好。
- 通过Plotly Express,用户可以用更少的代码创建图表。
交互性
- Bokeh:
- 支持各种交互工具,如缩放、平移、选择、悬停等。
- 可以通过JavaScript回调实现自定义交互行为。
- Bokeh Server允许创建实时数据流和动态更新的应用。
- Plotly:
- 提供丰富的交互功能,如缩放、悬停信息、点击事件等。
- 支持Dash框架,用于创建交互式Web应用。
- 可以与Plotly平台集成,便于分享和协作。
集成与生态系统
- Bokeh:
- 与Pandas、NumPy等Python数据科学库无缝集成。
- 可在Jupyter Notebook中使用,也可嵌入Web应用。
- 适合与其他Python Web框架(如Flask、Django)集成。
- Plotly:
- 与Dash框架紧密结合,用于构建完整的Web应用。
- 提供与R、Julia等其他语言的接口,跨语言支持强。
- 支持Jupyter Notebook、JupyterLab和Google Colab。
社区和支持
- Bokeh:
- 拥有活跃的开源社区,丰富的文档和示例。
- 主要依赖于社区支持和用户贡献。
- Plotly:
- 提供商业支持选项和企业级解决方案。
- 拥有丰富的在线文档、教程和示例。
适用场景
- Bokeh:
- 适合需要实时更新和复杂交互的应用场景。
- 常用于科学计算、数据分析和大规模数据可视化。
- Plotly:
- 适合快速创建和共享交互式图表。
- 常用于数据分析、商业报告和仪表盘开发。
总结
Bokeh和Plotly各有优劣,选择哪个库取决于具体的需求和使用场景。如果需要高灵活性和实时交互的Web应用,Bokeh可能是更好的选择;而如果需要快速创建漂亮的交互式图表并在多平台上共享,Plotly可能更适合。
参考链接: