当前位置: 首页 > article >正文

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

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

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


1. Bokeh 简介

什么是 Bokeh?

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

Bokeh 的特点

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

示例代码

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

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 创建简单折线图的示例:

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)和交互选择器,可以为图表添加更多信息。

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 支持将多个图表组合为响应式布局,使其在不同设备上表现良好。

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 提供了内置的动画支持,可以创建动态可视化。

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 方法,可以全面定制图表的外观。

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 应用的示例:

from flask import Flask, render_template
from bokeh.embed import components
from bokeh.plotting import figure

app = 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 应用。以下是一个简单示例:

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.kler.cn/a/399008.html

相关文章:

  • 【windows】05-windows系统级深度隐藏文件方法
  • Linux:进程的优先级 进程切换
  • GPU分布式通信技术-PCle、NVLink、NVSwitch深度解析
  • 风电电力系统低碳调度论文阅读第一期
  • 有序数组的平方(leetcode 977)
  • 消息队列原理面试题及参考答案
  • Xcode控制台“po“错误:表达式解析失败
  • 笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像
  • 软考之面向服务架构SOA
  • 跨平台WPF框架Avalonia教程 十三
  • redis7.x源码分析:(3) dict字典
  • 山寨一个Catch2的SECTION
  • python strip() 详解
  • Mysql-DML语句
  • 基于YOLOv8深度学习的城市管理卡车违规倾倒垃圾检测(PyQt5界面+数据集+训练代码)
  • C++11标准模板(STL)- 算法 - 对一个范围内的拥有一定未指定类型的元素排序(qsort, qsort_s)
  • Flutter中的Material Theme完全指南:从入门到实战
  • 深入解析 Vue 3 中的 `v-model` 与相关知识点
  • 架构篇(理解架构的模式1)
  • SSH 与 SSL:主要区别及用途说明
  • 【论文模型复现】深度学习、地质流体识别、交叉学科融合?什么情况,让我们来看看
  • Linux dpkg命令详解
  • AI 提示词(Prompt)入门 十:最佳实践|详细询问,提供细节!
  • 给阿里云OSS绑定域名并启用SSL
  • vue3 如何调用第三方npm包内部的 pinia 状态管理库方法
  • Python脚本实现批量文件重命名与清单生成