【python】Bokeh 与 Plotly:创建交互式数据可视化工具

news/2024/11/22 7:25:48/

Bokeh 与 Plotly:创建交互式数据可视化工具

在现代数据分析中,交互式数据可视化已经成为一个重要的工具。它不仅能帮助我们更好地展示数据,还能通过直观的方式探索数据中的模式和异常。本文将对比两款流行的 Python 可视化库:BokehPlotly,帮助开发者选择适合的工具,并快速上手。


1. Bokeh 简介

什么是 Bokeh?

Bokeh 是一个专注于交互式、网页友好型可视化的 Python 库。它通过 HTML 和 JavaScript 渲染图表,可以轻松地嵌入到网页应用中,支持快速创建复杂的交互式可视化。

Bokeh 的特点

  • 高效的交互性:支持缩放、平移、悬停提示等。
  • 适合大数据集:通过分块渲染优化大数据量可视化。
  • 无缝集成:可嵌入在 Flask、Django 或 Jupyter Notebook 中。
  • 灵活的布局和工具栏:可以轻松定制图表的外观和功能。

示例代码

以下是用 Bokeh 创建简单散点图的示例:

python">from bokeh.plotting import figure, show
from bokeh.io import output_notebook# 设置在 Notebook 中输出
output_notebook()# 创建数据
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]# 创建图表
p = figure(title="简单散点图", x_axis_label='X轴', y_axis_label='Y轴')
p.circle(x, y, size=10, color="navy", alpha=0.5)# 显示图表
show(p)

2. Plotly 简介

什么是 Plotly?

Plotly 是一个功能强大的 Python 可视化库,专注于创建高质量的交互式图表。它支持多种编程语言,包括 Python、R 和 JavaScript,并且能够与 Dash 框架无缝结合,用于构建数据驱动的应用。

Plotly 的特点

  • 易用性:API 简洁直观,支持快速创建图表。
  • 高质量输出:支持静态和交互式的图表导出,包括 PNG、SVG 和 HTML。
  • 丰富的图表类型:包括 3D 图表、地理空间图、金融图表等。
  • 跨平台支持:可嵌入网页、Jupyter Notebook 和商业报告中。

示例代码

以下是用 Plotly 创建简单折线图的示例:

python">import plotly.express as px# 创建数据
data = {'x': [1, 2, 3, 4, 5], 'y': [6, 7, 2, 4, 5]}# 创建图表
fig = px.line(data, x='x', y='y', title='简单折线图')# 显示图表
fig.show()

3. Bokeh 与 Plotly 的对比

特性BokehPlotly
入门难度易于上手,但高级功能需要更多代码简单直观,适合初学者
图表类型提供丰富的基础图表类型支持更多高级图表类型(如 3D、地理图)
交互性强大,可定制交互工具内置交互,开箱即用
性能更适合大数据量场景适合中小规模数据集
可扩展性可与其他 Python 框架集成,灵活性更强与 Dash 框架集成,适合构建完整应用

4. 如何选择合适的工具?

选择 Bokeh 或 Plotly 应根据以下需求:

  • 如果你需要处理 大数据集,并且需要高度自定义的可视化效果,选择 Bokeh
  • 如果你关注 快速开发图表多样性,特别是需要嵌入到商业报告或网页应用中,选择 Plotly

5. 结论

Bokeh 和 Plotly 都是强大的交互式可视化工具。Bokeh 适合需要高度定制和大数据支持的用户,而 Plotly 更适合快速生成精美图表并支持多平台应用。了解各自的优势后,结合实际项目需求选择合适的工具,能够更高效地完成数据可视化任务。


6. 进阶功能:提升图表的交互性和美观性

无论是 Bokeh 还是 Plotly,它们都提供了丰富的 API 来进一步提升图表的交互性和美观性。以下是一些常见的进阶功能示例。

Bokeh 的进阶功能

1. 添加工具(Tooltips 和 Selectors)

Bokeh 提供了悬停提示(HoverTool)和交互选择器,可以为图表添加更多信息。

python">from bokeh.models import HoverTool
from bokeh.plotting import figure, show# 数据
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]# 创建图表
p = figure(title="带悬停提示的图表", x_axis_label='X轴', y_axis_label='Y轴')
p.circle(x, y, size=10, color="orange", alpha=0.8)# 添加悬停工具
hover = HoverTool(tooltips=[("X值", "@x"), ("Y值", "@y")])
p.add_tools(hover)# 显示图表
show(p)
2. 响应式布局

Bokeh 支持将多个图表组合为响应式布局,使其在不同设备上表现良好。

python">from bokeh.layouts import gridplot
from bokeh.plotting import figure, show# 创建两个图表
p1 = figure(title="图表 1")
p1.line([1, 2, 3], [4, 5, 6])p2 = figure(title="图表 2")
p2.circle([1, 2, 3], [6, 7, 8])# 使用网格布局
layout = gridplot([[p1, p2]])
show(layout)

Plotly 的进阶功能

1. 动画效果

Plotly 提供了内置的动画支持,可以创建动态可视化。

python">import plotly.express as px# 数据
df = px.data.gapminder()# 创建动画图表
fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year",size="pop", color="continent", hover_name="country",log_x=True, size_max=55, title="全球 GDP 与寿命变化")fig.show()
2. 自定义外观

通过 Plotly 的 update_layout 方法,可以全面定制图表的外观。

python">import plotly.express as px# 创建图表
fig = px.bar(x=["A", "B", "C"], y=[10, 20, 15], title="定制化柱状图")# 修改布局
fig.update_layout(title_font_size=20,xaxis_title="类别",yaxis_title="数量",template="plotly_dark"
)fig.show()

7. 实际案例:将可视化嵌入 Web 应用

对于需要将交互式图表嵌入到 Web 应用的场景,Bokeh 和 Plotly 都有成熟的解决方案。

Bokeh 嵌入 Flask 应用

以下是将 Bokeh 图表嵌入到 Flask 应用的示例:

python">from flask import Flask, render_template
from bokeh.embed import components
from bokeh.plotting import figureapp = Flask(__name__)@app.route("/")
def index():# 创建图表plot = figure(title="嵌入 Flask 的 Bokeh 图表")plot.line([1, 2, 3], [4, 6, 5], line_width=2)# 嵌入图表script, div = components(plot)return render_template("index.html", script=script, div=div)if __name__ == "__main__":app.run(debug=True)

Plotly 与 Dash

Plotly 提供了 Dash 框架,用于快速构建交互式的 Web 应用。以下是一个简单示例:

python">from dash import Dash, dcc, html# 创建 Dash 应用
app = Dash(__name__)# 定义布局
app.layout = html.Div([dcc.Graph(id='example-plotly-chart',figure={'data': [{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': '示例'}],'layout': {'title': '嵌入 Dash 的 Plotly 图表'}})
])if __name__ == '__main__':app.run_server(debug=True)

8. 资源推荐

  • Bokeh 文档: https://docs.bokeh.org
  • Plotly 文档: https://plotly.com/python/
  • Dash 文档: https://dash.plotly.com

通过本文的学习,你已经了解了 Bokeh 和 Plotly 的核心功能和用法。选择一个适合你的工具,开始创建炫酷的交互式数据可视化!


http://www.ppmy.cn/news/1548652.html

相关文章

第十二章 并行Stream流

目录 一、引言 二、获取并行Stream流的两种方式 三、并行和串行Stream流的效率对比 四、parallelStream线程安全问题 五、parallelStream背后的技术 5.1. Fork/Join框架介绍 5.2. Fork/Join原理-分治法 5.3. Fork/Join原理-工作窃取算法 5.4. Fork/Join案例 一、引言 …

深入解析Kernel32.dll与Msvcrt.dll

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 介绍Kernel32.dll:Windows操作系统的核心Msvcrt.dll:C运行时库的核心 使用举例使用Kernel32.dll的示例:文件操作使用Msvcrt.dll的…

SpringBoot 2.2.10 无法执行Test单元测试

很早之前的项目今天clone现在,想执行一个业务订单的检查,该检查的代码放在test单元测试中,启动也是好好的,当点击对应的方法执行Test的时候就报错 tip:已添加spring-boot-test-starter 所以本身就引入了junit5的库 No…

基于SSM的农家乐管理系统+论文示例参考

1.项目介绍 功能模块:管理员(农家乐管理、美食信息管理、住宿信息管理、活动信息、用户管理、活动报名、论坛等),普通用户(注册登录、活动报名、客房预订、用户评价、收藏管理、模拟支付等)技术选型&#…

VRRP HSRP GLBP 三者区别

1. VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议) 标准协议:VRRP 是一种开放标准协议(RFC 5798),因此支持的厂商较多,通常用于多种网络设备中。主备模式:…

蓝桥杯第22场小白入门赛2~5题

这场比赛开打第二题就理解错意思了,还以为只能用3个消除和5个消除其中一种呢,结果就是死活a不过去,第三题根本读不懂题意,这蓝桥杯的题面我只能说出的是一言难尽啊。。第四题写出来一点但是后来知道是错了,不会正解&am…

Docker入门之Windows安装Docker初体验

在之前我们认识了docker的容器,了解了docker的相关概念:镜像,容器,仓库:面试官让你介绍一下docker,别再说不知道了 之后又带大家动手体验了一下docker从零开始玩转 Docker:一站式入门指南&#…

CentOS 升级 gcc 版本

CentOS 升级 gcc 版本 1. 安装步骤 CentOS7 默认的 gcc 版本是4.8,有时候需要更高版本,这里介绍一下如何将 gcc 版本升级到 8.3.1 安装 centos-release-scl yum install centos-release-scl安装devtoolset,注意,如果想安装 9.* …