器→工具, 工具软件, 数据, 术→技巧

Python数据可视化工具bokeh

钱魏Way · · 0 次浏览

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可能更适合。

参考链接:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注