首页 > 分享 > Python数据可视化工具bokeh

Python数据可视化工具bokeh

目录

Bokeh简介核心特性应用场景Bokeh的使用安装Bokeh创建简单图表使用ColumnDataSource添加交互工具在Jupyter Notebook中使用Bokeh使用Bokeh服务器Bokeh与polt.ly的对比设计理念用户界面和体验交互性集成与生态系统社区和支持适用场景

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进行安装:

Plain text

Copy to clipboard

Open code in new window

EnlighterJS 3 Syntax Highlighter

# 使用pip安装

pip install bokeh

# 使用conda安装

conda install bokeh

# 使用pip安装 pip install bokeh # 使用conda安装 conda install bokeh

# 使用pip安装 pip install bokeh # 使用conda安装 conda install bokeh

创建简单图表

Bokeh提供了一些简单的函数来快速创建基本图表。以下是一个创建简单折线图的示例:

Plain text

Copy to clipboard

Open code in new window

EnlighterJS 3 Syntax Highlighter

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)

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)

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中用于管理数据的对象,可以用于创建更加复杂和交互式的图表:

Plain text

Copy to clipboard

Open code in new window

EnlighterJS 3 Syntax Highlighter

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)

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)

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允许添加多种交互工具,如缩放、平移、悬停工具等:

Plain text

Copy to clipboard

Open code in new window

EnlighterJS 3 Syntax Highlighter

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)

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)

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需要进行一些设置,以便图表能够正确显示:

Plain text

Copy to clipboard

Open code in new window

EnlighterJS 3 Syntax Highlighter

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)

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)

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服务器应用示例:

Plain text

Copy to clipboard

Open code in new window

EnlighterJS 3 Syntax Highlighter

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)

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)

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服务器应用,需要在命令行中执行以下命令:

Plain text

Copy to clipboard

Open code in new window

EnlighterJS 3 Syntax Highlighter

bokeh serve --show script_name.py

bokeh serve --show script_name.py

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

参考链接:

Bokeh documentation — Bokeh 3.6.2 Documentation Data Visualization with Bokeh Tutorial: Getting Started | DataCamp

相关知识

Python数据可视化工具bokeh
python 可视化包 Bokeh
可视化工具选择指南:Bokeh与Plotly比较详解
基于Python实现交互式数据可视化的工具(用于Web)
十大Python可视化工具,太强了
Python数据分析数据可视化
利用Python进行数据可视化常见的9种方法!超实用!
【数据可视化中的艺术】:将玫瑰花的美丽转化为数据之美,Python数据图形的精妙运用
Python中的数据可视化:使用Matplotlib创建交互式图表
如何用python代码做可视化 – PingCode

网址: Python数据可视化工具bokeh https://m.huajiangbk.com/newsview2500348.html

所属分类:花卉
上一篇: 以分析鸢尾花数据集(Iris D
下一篇: 十大Python可视化工具,太强