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

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.rhkb.cn/news/474449.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c++丨STL】list的使用

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 前言 list简介 一、list的默认成员函数 构造函数(constructor) 析构函数 赋值重载 二、list的迭代器接口 迭代器的功能分类 三、list的容量…

如何解决JAVA程序通过obloader并发导数导致系统夯住的问题 | OceanBase 运维实践

案例背景 某保险机构客户的数据中台,自系统上线后不久,会定期的用 obload 工具从上游业务系统导入数据至OceanBase数据库。但,不久便遇到了应用服务器的 Memory 与 CPU 资源占用持续攀升,最终导致系统夯住而不可用的异常。 memo…

人工智能:塑造未来的工作与生活

目录 人工智能技术的应用前景与影响 人工智能的历史与现状 人工智能的应用领域 人工智能的前景与挑战 个人视角:人工智能的应用前景与未来 人工智能在生活中的潜力 面对人工智能带来的挑战 我的观点与建议 结语 人工智能技术的应用前景与影响 随着人工智能…

MATLAB绘制克莱因瓶

MATLAB绘制克莱因瓶 clc;close all;clear all;warning off;% clear all rand(seed, 100); randn(seed, 100); format long g;% Parameters u_range linspace(0, 2*pi, 100); v_range linspace(0, pi, 50); [U, V] meshgrid(u_range, v_range);% Parametric equations for t…

go-zero(二) api语法和goctl应用

go-zero api语法和goctl应用 在实际开发中,我们更倾向于使用 goctl 来快速生成代码。 goctl 可以根据 api快速生成代码模板,包括模型、逻辑、处理器、路由等,大幅提高开发效率。 一、构建api demo 现在我们通过 goctl 创建一个最小化的 HT…

鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)

元服务是什么?和App的关系? 元服务是是一种HarmonyOS轻量应用形态,用户无需安装即可使用,具备随处可及、服务直达、自由流转的特征。 元服务是可以独立部署和运行的程序实体,独立于应用,不依赖应用可独立…

k8s上部署redis高可用集群

介绍: Redis Cluster通过分片(sharding)来实现数据的分布式存储,每个master节点都负责一部分数据槽(slot)。 当一个master节点出现故障时,Redis Cluster能够自动将故障节点的数据槽转移到其他健…

智慧环保平台_大数据平台_综合管理平台_信息化云平台

系统原理   智慧环保是新一代信息技术变革的产物,是信息资源日益成为重要生产要素和信息化向更高阶段发展的表现,是经济社会发展的新引擎。   现今,环保信息化建设进入高速发展阶段。在此轮由物联网掀起的信息浪潮下,环境信息…

《通往人工智能深度学习专家之路:全面解析学习路线图》

《通往人工智能深度学习专家之路:全面解析学习路线图》 一、人工智能深度学习简介1.1 人工智能与深度学习的关系1.2 深度学习的应用领域1.3 深度学习的重要性 二、深度学习路线图总览2.1 学习路线图的结构2.2 各阶段学习目标与重点 三、深度学习基础阶段3.1 数学基础…

Git 分⽀规范 Git Flow 模型

前言 GitFlow 是一种流行的 Git 分支管理策略,由 Vincent Driessen 在 2010 年提出。它提供了一种结构化的方法来管理项目的开发、发布和维护,特别适合大型和复杂的项目。GitFlow 定义了一套明确的分支模型和工作流程,使得团队成员可以更有效…

任务管理功能拆解——如何高效管理项目任务?

在项目管理中,任务管理功能不仅仅是一个操作工具,它是确保项目按时、高效完成的核心所在。无论是小团队还是跨部门合作,任务管理能够帮助项目经理和团队成员清晰地看到每一项任务的执行情况和进度,从而合理调配资源、优化工作流程…

nodejs入门(1):nodejs的前后端分离

一、引言 我关注nodejs还是从前几年做了的一个电力大数据展示系统开始的,当然,我肯定是很多年的计算机基础的,万变不离其宗。 现在web网站都流行所谓的前后端结构,不知不觉我也开始受到这个影响,以前都是前端直接操作…

集群聊天服务器(13)redis环境安装和发布订阅命令

目录 环境安装订阅redis发布-订阅的客户端编程环境配置客户端编程 功能测试 环境安装 sudo apt-get install redis-server 先启动redis服务 /etc/init.d/redis-server start默认在6379端口上 redis是存键值对的,还可以存链表、数组等等复杂数据结构 而且数据是在…

深入解析大带宽服务器:性能优势与选择指南

一、大带宽服务器是什么? 大带宽服务器指的是具备高网络带宽能力的服务器,通常提供1Gbps、10Gbps甚至更高的网络连接能力。与普通带宽服务器相比,大带宽服务器能够在更短时间内传输大量数据,因此常用于高流量、高并发需求的场景&…

关于Qt C++中connect的几种写法

目录 1. 传统的槽函数写法 2. 使用函数指针的connect写法(5.0) 3. Lambda表达式作为槽函数(C11) 4.使用QOverload选择重载信号的写法 这connect函数就像是编程世界里的“茴”字,千变万化,各有千秋。咱们…

常见网络厂商设备默认用户名/密码大全

常见网络厂商的默认用户名/密码 01 思科 (Cisco) 设备类型:路由器、交换机、防火墙、无线控制器 默认用户名:cisco 默认密码:cisco 设备类型:网管型交换机 默认用户名:admin 默认密码:admin 02 华…

elasticsearch是如何实现master选举的?

大家好,我是锋哥。今天分享关于【elasticsearch是如何实现master选举的?】面试题。希望对大家有帮助; elasticsearch是如何实现master选举的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…

讯飞、阿里云、腾讯云:Android 语音合成服务对比选择

在 移动端 接入语音合成方面,讯飞和腾讯云等都是优秀的选择,但各有其特点和优势。咱们的需求是需要支持普通话/英语/法语三种语言,以下是对各个平台的详细比较: 一、讯飞语音合成介绍 与语音听写相反,语音合成是将一段…

说说软件工程中的“协程”

在软件工程中,协程(coroutine)是一种程序运行的方式,可以理解成“协作的线程”或“协作的函数”。以下是对协程的详细解释: 一、协程的基本概念 定义:协程是一组序列化的子过程,用户能像指挥家…

使用 JavaScript 制作 To-Do List

使用 JavaScript 制作 To-Do List 本文记录了使用 HTML、CSS 和 JavaScript 制作一个简单的 To-Do List 网页的全过程,包含功能描述、代码实现以及优化方向。 **🎉🎉🎉欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的…