掌握Python库的Bokeh,就能让你的交互炫目可视化
本文分享自华为云社区《Bokeh图形魔法:掌握绘图基础与高级技巧,定制炫目可视化》,作者: 柠檬味拥抱。
Bokeh是一个用于创建交互式可视化图形的强大Python库。它不仅易于使用,而且功能强大,适用于各种数据可视化需求。本文将介绍Bokeh库的绘图可视化基础入门,重点说明常用的参数,并通过实例演示如何在实际项目中应用这些技术。
安装Bokeh库
首先,确保你已经安装了Bokeh库。如果没有安装,可以使用以下命令进行安装:
pip install bokeh
Bokeh绘图基础
Bokeh支持多种图形类型,包括散点图、线图、柱状图等。在绘制这些图形时,我们需要关注一些重要的参数。
基础图形绘制
首先,我们来看一个简单的例子,绘制一个散点图:
from bokeh.plotting import figure, show
from bokeh.io import 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) # 在Jupyter Notebook中显示图形
output_notebook()
show(p)
在上述代码中,我们使用figure
函数创建了一个绘图对象,并使用circle
方法绘制了一个散点图。size
参数控制点的大小,color
参数定义颜色,alpha
参数设置透明度。
完善图形
除了基本的绘图,Bokeh还支持添加轴标签、图例等元素,使图形更加完整。以下是一个例子:
# 添加轴标签
p.xaxis.axis_label_standoff = 15
p.yaxis.axis_label_standoff = 15 # 添加图例
p.legend.label_text_font_size = "12pt"
p.legend.location = "top_left" # 在Jupyter Notebook中显示图形
output_notebook()
show(p)
通过以上代码,我们在图形上方添加了X轴和Y轴的标签,并在左上角添加了图例。
实例演示
让我们通过一个实际案例,展示如何使用Bokeh进行更复杂的可视化。
案例:股票走势图
import yfinance as yf # 获取股票数据
stock_data = yf.download("AAPL", start="2023-01-01", end="2024-01-01") # 创建绘图对象
p = figure(title="AAPL股票走势", x_axis_label='日期', y_axis_label='股价(美元)', x_axis_type="datetime") # 绘制线图
p.line(stock_data.index, stock_data['Close'], line_width=2, color="orange", legend_label="收盘价") # 添加图例和轴标签
p.legend.location = "top_left"
p.xaxis.axis_label_standoff = 15
p.yaxis.axis_label_standoff = 15 # 在Jupyter Notebook中显示图形
output_notebook()
show(p)
在这个例子中,我们使用了yfinance
库获取了苹果公司(AAPL)股票在指定日期范围内的数据,并使用Bokeh绘制了股票的收盘价走势图。
Bokeh库高级功能探索
在了解了Bokeh的基础绘图技术后,我们将深入探讨一些高级功能,使得你能够更灵活、更创造性地进行数据可视化。
1. 工具栏和交互性
Bokeh提供了丰富的工具栏,可以让用户与图形进行交互。下面是一个包含工具栏的例子:
from bokeh.models import HoverTool # 创建绘图对象
p = figure(title="交互式散点图", x_axis_label='X轴', y_axis_label='Y轴', tools="pan,box_zoom,reset,save") # 添加悬停工具
hover = HoverTool(tooltips=[("数值", "@x, @y")])
p.add_tools(hover) # 绘制散点图
p.circle(x, y, size=10, color="navy", alpha=0.5) # 在Jupyter Notebook中显示图形
output_notebook()
show(p)
在上述例子中,我们通过tools
参数添加了平移、缩放、重置和保存工具,并使用HoverTool
添加了悬停提示。
2. 高级图形元素
Bokeh支持绘制一些高级图形元素,例如矩形、椭圆等。以下是一个绘制矩形和椭圆的例子:
# 创建绘图对象
p = figure(title="矩形和椭圆示例", x_axis_label='X轴', y_axis_label='Y轴') # 绘制矩形
p.rect(x=[1, 2, 3], y=[4, 5, 6], width=0.2, height=0.2, color="green", alpha=0.7) # 绘制椭圆
p.ellipse(x=[4, 5, 6], y=[7, 8, 9], width=0.2, height=0.1, color="blue", alpha=0.7) # 在Jupyter Notebook中显示图形
output_notebook()
show(p)
3. 数据链接和动态更新
Bokeh允许你动态地更新图形,可以根据用户的输入或外部事件来实现。以下是一个简单的例子,演示如何通过滑块动态更新散点图:
from bokeh.models import Slider
from bokeh.layouts import column # 创建绘图对象
p = figure(title="动态散点图", x_axis_label='X轴', y_axis_label='Y轴') # 创建滑块
slider = Slider(start=1, end=10, step=1, value=1, title="选择散点大小") # 回调函数,根据滑块值更新散点大小
def update_size(attr, old, new):
p.circle(x, y, size=new, color="navy", alpha=0.5) slider.on_change('value', update_size) # 将图形和滑块组合在一起
layout = column(p, slider) # 在Jupyter Notebook中显示图形
output_notebook()
show(layout)
在这个例子中,滑块的值变化时,通过回调函数更新了散点的大小,实现了动态更新效果。,你可以创建出更具吸引力和实用性的可视化图形,更好地展示和解释数据。继续探索Bokeh的文档和示例,发挥其潜力,提升你的数据可视化技能。
Bokeh库与其他库的整合
Bokeh可以与其他Python库无缝整合,进一步拓展其功能。在本节中,我们将介绍Bokeh与Pandas、Matplotlib等库的整合,以及如何在Web应用中使用Bokeh。
1. 与Pandas整合
Pandas是一个强大的数据分析库,而Bokeh可以轻松地与Pandas进行整合,实现更便捷的数据可视化。
import pandas as pd # 创建一个Pandas DataFrame
data = pd.DataFrame({'x': [1, 2, 3, 4, 5], 'y': [6, 7, 2, 4, 5]}) # 使用Bokeh绘制散点图
p = figure(title="Pandas整合示例", x_axis_label='X轴', y_axis_label='Y轴')
p.circle('x', 'y', size=10, color="navy", alpha=0.5, source=data) # 在Jupyter Notebook中显示图形
output_notebook()
show(p)
在这个例子中,我们创建了一个Pandas DataFrame,并使用Bokeh的circle
函数绘制了散点图,其中的数据直接来自于DataFrame。
2. 与Matplotlib整合
如果你已经熟悉Matplotlib,并且希望结合Bokeh的交互性和Matplotlib的绘图功能,你可以使用bokeh.plotting
的from_bokeh
函数将Bokeh图形转换为Matplotlib图形。
from bokeh.plotting import figure, show
from bokeh.io import output_notebook
from bokeh.plotting import from_bokeh # 创建Bokeh绘图对象
p = figure(title="Bokeh与Matplotlib整合示例", x_axis_label='X轴', y_axis_label='Y轴')
p.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=10, color="navy", alpha=0.5) # 在Jupyter Notebook中显示Bokeh图形
output_notebook()
show(p) # 转换为Matplotlib图形
mpl_fig = from_bokeh(p) # 在Matplotlib中显示图形
import matplotlib.pyplot as plt
plt.show(mpl_fig)
这样,你可以在使用Bokeh的同时,充分利用Matplotlib的丰富绘图功能。
3. 在Web应用中使用Bokeh
Bokeh提供了bokeh.server
模块,使得你能够将Bokeh图形嵌入到Web应用中。这样,你可以创建交互式、动态的可视化应用。
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Slider
from bokeh.layouts import column
from bokeh.io import curdoc # 创建绘图对象和数据源
source = ColumnDataSource(data={'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, source=source) # 创建滑块和回调函数
slider = Slider(start=1, end=10, step=1, value=1, title="选择散点大小") def update_size(attr, old, new):
source.data = {'x': [1, 2, 3, 4, 5], 'y': [6, 7, 2, 4, 5], 'size': [new]*5} slider.on_change('value', update_size) # 将图形和滑块组合在一起
layout = column(p, slider) # 将布局添加到文档
curdoc().add_root(layout)
通过上述代码,你可以使用Bokeh创建一个交互式Web应用。运行此脚本后,可以通过访问http://localhost:5006/
在本地查看应用。
Bokeh库的主题和样式定制
Bokeh不仅提供了丰富的绘图功能,还允许用户根据需求自定义图形的主题和样式,以便更好地与项目风格或品牌一致。在本节中,我们将学习如何定制Bokeh图形的主题和样式。
1. 主题定制
Bokeh提供了一系列内置主题,用户可以轻松切换以改变图形的整体外观。以下是一个主题定制的简单例子:
from bokeh.themes import built_in_themes # 创建绘图对象
p = figure(title="主题定制示例", x_axis_label='X轴', y_axis_label='Y轴') # 选择主题
p.theme = built_in_themes['dark_minimal'] # 在Jupyter Notebook中显示图形
output_notebook()
show(p)
在这个例子中,我们选择了内置主题'dark_minimal'
,你可以根据实际需求选择其他主题,如'light_minimal'
、'caliber'
等。
2. 样式定制
Bokeh还允许用户直接调整图形的样式,包括颜色、线型、字体等。以下是一个简单的样式定制例子:
# 创建绘图对象
p = figure(title="样式定制示例", x_axis_label='X轴', y_axis_label='Y轴') # 绘制线图
p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width=2, line_color="green", line_dash="dashed") # 设置字体样式
p.title.text_font = "times"
p.title.text_font_style = "italic" # 在Jupyter Notebook中显示图形
output_notebook()
show(p)
在这个例子中,我们使用line_color
参数设置线的颜色为绿色,使用line_dash
参数设置线型为虚线,通过设置title.text_font
和title.text_font_style
调整标题的字体和样式。
3. 自定义工具提示
Bokeh允许用户自定义工具提示的内容和样式,以更好地满足项目需求。以下是一个自定义工具提示的例子:
from bokeh.models import HoverTool # 创建绘图对象
p = figure(title="自定义工具提示示例", x_axis_label='X轴', y_axis_label='Y轴') # 绘制散点图
scatter = p.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=10, color="navy", alpha=0.5) # 自定义工具提示
hover = HoverTool(tooltips=[("数值", "@x, @y"), ("额外信息", "自定义信息")], renderers=[scatter])
p.add_tools(hover) # 在Jupyter Notebook中显示图形
output_notebook()
show(p)
在这个例子中,我们通过HoverTool
的tooltips
参数定义了工具提示的内容,并通过renderers
参数指定了应用工具提示的图形元素。
总结
Bokeh库是一个功能强大、灵活且易于使用的Python可视化库,适用于各种数据可视化需求。本文从基础入门开始,介绍了Bokeh的基本绘图技术,包括散点图、线图、柱状图等,详细说明了常用的参数和实例演示。随后,我们深入探讨了Bokeh的高级功能,包括工具栏、交互性、高级图形元素和动态更新,使得读者能够更灵活地进行数据可视化。
进一步地,我们探讨了Bokeh库与其他常用库的整合,包括与Pandas、Matplotlib的结合,以及在Web应用中使用Bokeh的方法。这使得Bokeh不仅可以独立使用,还可以与其他库协同工作,充分发挥各个库的优势。
最后,我们了解了Bokeh库的主题和样式定制,学习了如何选择内置主题、调整样式和自定义工具提示,以便更好地满足个性化的可视化需求。Bokeh的主题和样式定制功能为用户提供了更多定制化的空间,使得可视化图形更符合项目的整体风格和品牌。
通过本文的内容,读者可以建立起对Bokeh库全面的认识,从基础到高级,从整合到定制,为数据科学家和工程师提供了强大的工具,助力更好地理解、展示和传达数据。继续深入学习Bokeh的文档和示例,将有助于更加熟练地运用这一强大的可视化工具。
掌握Python库的Bokeh,就能让你的交互炫目可视化的更多相关文章
- 2017年排名前15的数据科学python库
2017年排名前15的数据科学python库 2017-05-22 Python程序员 Python程序员 Python程序员 微信号 pythonbuluo 功能介绍 最专业的Python社区,有每 ...
- 最常用的几个python库--学习引导
核心库 1.NumPy 当我们用python来处理科学计算任务时,不可避免的要用到来自SciPy Stack的帮助.SciPy Stack是一个专为python中科学计算而设计的软件包,注意不要将它 ...
- 最受欢迎的 15 大 Python 库(2017)
核心库 1. NumPy (提交数: 15980, 贡献者数: 522) 当开始处理Python中的科学任务,Python的SciPy Stack肯定可以提供帮助,它是专门为Python中科学计算而设 ...
- 一个交互式可视化Python库——Bokeh
本篇为<Python数据可视化实战>第十篇文章,我们一起学习一个交互式可视化Python库--Bokeh. Bokeh基础 Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Py ...
- Python 库大全
作者:Lingfeng Ai链接:http://www.zhihu.com/question/24590883/answer/92420471来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...
- 哪些 Python 库让你相见恨晚?【转】
原文链接:https://www.zhihu.com/question/24590883/answer/92420471 原文链接:Python 资源大全 ---------------- 这又是一个 ...
- Python库资源大全
转载地址:https://zhuanlan.zhihu.com/p/27350980 本文是一个精心设计的Python框架.库.软件和资源列表,是一个Awesome XXX系列的资源整理,由BigQu ...
- Python库,让你相见恨晚的第三方库
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具.pyenv – 简单的 Python 版本管理工具.Vex – 可以在虚拟环境中执行命令.virt ...
- Python 库,资源
库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...
- Python资源 --Python库
环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环境的工 ...
随机推荐
- Docker从认识到实践再到底层原理(二-3)|LXC容器
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...
- PHP中的正则表达式相关函数
PHP中的正则表达式相关函数 常用的正则函数 1.执行一个正则表达式匹配 int preg_match ( string pattern , string subject [, array & ...
- [奶奶看了都会]ChatGPT接入企业微信成为聊天机器人
1.聊天效果 上次给大家讲了ChatGPT接入个人微信的方法,但是个人微信容易被封号.这次就教大家接入企业微信,不会再被封号哦~ 话不多说,直接看机器人的聊天效果.基本能实现ChatGPT的聊天效果了 ...
- CH57x/CH58x/CH59x主从机主动发起断连
如果在做应用的时需要同时使用使用两块板子分别做主从机或者使用一块板子做单独的从机: 这是我们需要按下某个按键或者发送某条指令主机或者从机主动断开与对方的连接且设备不需要复位: 主机端我们可以调用这样一 ...
- [转载自jayant97] nRF9160与nRF Cloud 超详细入门攻略
原文链接:nRF9160与nRF Cloud 超详细入门攻略 1. 产品简介 1.1. nRF Cloud nRF Cloud是Nordic Semiconducotr公司在AWS上搭建的IoT平 ...
- [Elasticsearch] Elasticsearch 启动访问报错问题
Elasticsearch 启动访问报错问题 产生的问题与解决方案 环境:Windows 10 ES 版本:8.12.0 现象: 双击 elasticsearch.bat 文件启动后,访问 http: ...
- 【Unity3D】UGUI之Button
1 Button属性面板 在 Hierarchy 窗口右键,选择 UI 列表里的 Button 控件,即可创建 Button 控件,选中创建的 Button 控件,按键盘[T]键,可以调整 But ...
- Stream 总结
1 前言 Stream 是 Java 8 中为方便操作集合及其元素而定制的接口,它将要处理的元素集合看作一种流,对流中的元素进行过滤.排序.映射.聚合等操作.使用 Stream API,就好像使用 S ...
- VuePress + Github Pages 搭建文档博客
说明 最近想把常用的一些干货知识点都集中起来,方便发布和查找.相当于创建一个自己的知识库,我就叫它Java技术文档.虽然博客写文档也挺方便,但是在于文档的集中阅读和管理方面还是不够简洁和快速.此处就以 ...
- Java Swing实现五子棋程序
首先感谢08年MLDN出的这个培训视频,我把代码和文档整理了一下,发布出来给需要学习Swing的朋友. 源码地址: https://gitee.com/indexman/gobang 一.知识点准备: ...