【数据科学】Bokeh

简介: 【数据科学】Bokeh

一、使用 Bokeh 绘图

  BokehPython 的交互式可视图库,用于 生成在浏览器里显示的大规模数据集高性能可视图

  Bokeh 的中间层通用 bokeh.plotting 界面主要为两个组件:数据图示符

  使用 bokeh.plotting 界面绘图的基本步骤为

  1. 准备数据

  Python列表、Numpy数组、Pandas数据框或其它序列值

  2. 准备数据创建图形。

  3. 为数据添加渲染器,自定义可视化图

  4. 指定生成的输出类型

  5. 显示视图或保存结果

>>> from bokeh.plotting import figure
>>> from bokeh.io import output_file, show
>>> x = [1, 2, 3, 4, 5]
>>> y = [6, 7, 2, 4, 5]
>>> p = figure(title="simple line example", x_axis_label='x', y_axis_label='y')
>>> p.line(x, y, legend="Temp.", line_width=2)
>>> output_file("lines.html")
>>> show(p)

二、数据

  通常,Bokeh 在后台把数据转换为列数据源,不过也可 手动转换

>>> import numpy as np
>>> import pandas as pd
# 首先需要导入必要的库(NumPy和Pandas)
>>> df = pd.DataFrame(np.array([[33.9,4,65, 'US'],[32.4,4,66, 'Asia'],[21.4,4,109, 'Europe']]), columns=['mpg','cyl', 'hp', 'origin'],index=['Toyota', 'Fiat', 'Volvo'])
>>> from bokeh.models import ColumnDataSource
# 然后创建一个包含数据的数据框(DataFrame)
>>> cds_df = ColumnDataSource(df)
# 通过将数据框传递给ColumnDataSource函数,将数据框转换为列数据源对象

  上述我们使用NumPyPandas创建了一个包含汽车相关数据的数据框。然后,通过将数据框传递给ColumnDataSource函数,将数据框转换为列数据源对象cds_df。现在,可以使用该列数据源对象来创建Bokeh可视化图形,并 将其与其他Bokeh组件(如图表、图形等)一起使用


三、绘图

  先使用Bokeh创建三个图形对象

>>> from bokeh.plotting import figure
>>> p1 = figure(plot_width=300,tools='pan,box_zoom')
>>> p2 = figure(plot_width=300, plot_height=300, x_range=(0, 8), y_range=(0, 8))
>>> p3 = figure() 

  通过这些图形对象,我们就可以 使用Bokeh的其他函数和方法添加数据、图表类型等内容,并进行数据可视化


四、渲染器与自定义可视化

4.1 图示符

4.1.1 散点标记

  使用Bokeh向图形对象 添加散点图和方形图

>>> p1.circle(np.array([1,2,3]), np.array([3,2,1]), fill_color='white')
>>> p2.square(np.array([1.5,3.5,5.5]), [1,4,3], 


4.1.2 线型图示符

  使用Bokeh向图形对象 添加线段图

>>> p1.line([1,2,3,4], [3,4,5,6], line_width=2)
# 使用p1.line()函数将一条直线段添加到图形中。这里传入的参数为x坐标和y坐标的数组:[1,2,3,4]和[3,4,5,6]
# 通过设置line_width=2,将线段的宽度设置为2个像素
>>> p2.multi_line(pd.DataFrame([[1,2,3],[5,6,7]]),pd.DataFrame([[3,4,5],[3,2,1]]),color="blue")
# 使用p2.multi_line()函数将多条线段组成的线段图添加到图形中。这里传入的参数为两个DataFrame对象:第一个DataFrame对象包含x坐标的数据,第二个DataFrame对象包含y坐标的数据
# x坐标的DataFrame为pd.DataFrame([[1,2,3],[5,6,7]]),y坐标的DataFrame为pd.DataFrame([[3,4,5],[3,2,1]])。通过设置color="blue",将线段的颜色设置为蓝色


4.2 自定义图示符

4.2.1 图示符选择与反选

  使用Bokeh创建一个图形对象,并向图形中添加一个散点图

>>> p = figure(tools='box_select')
>>> p.circle('mpg', 'cyl', source=cds_df, selection_color='red', nonselection_alpha=0.1)

  以上我们创建一个拥有框选工具的图形对象,并向图形中添加一个散点图。散点图的x坐标为mpg,y坐标为cyl。散点图的数据源为名为cds_df的ColumnDataSource对象。所选散点的颜色为红色,未选中散点的透明度为0.1。


4.2.2 绘图区内部

  使用 Bokeh 向图形对象添加一个悬停工具

>>> from bokeh.models import HoverTool
# 首先,从 bokeh.models 模块导入 HoverTool 类
>>> hover = HoverTool(tooltips=None, mode='vline') 
# 使用 HoverTool() 函数创建一个悬停工具对象,并将其赋值给变量 hover
# 通过设置 tooltips=None 将工具提示设置为空,即不显示任何工具提示信息。通过设置 mode='vline' 将悬停模式设置为垂直线模式
>>>> p3.add_tools(hover)
# 使用 add_tools() 方法将悬停工具添加到图形对象 p3 中

  通过执行上述代码,我们将创建一个悬停工具对象,并将其添加到图形对象 p3 中悬停工具将以垂直线模式显示,并且不显示任何工具提示信息


4.2.3 色彩表

>>> from bokeh.models import CategoricalColorMapper
>>> color_mapper = CategoricalColorMapper(factors=['US', 'Asia', 'Europe'],palette=['blue', 'red', 'green'])
>>> p3.circle('mpg', 'cyl', source=cds_df,color=dict(field='origin', transform=color_mapper),legend='Origin')

  通过执行上述代码,将 创建一个散点图,并使用 CategoricalColorMapper 将不同类别的数据点映射为不同的颜色。颜色映射会根据 ‘origin’ 字段的值进行映射,并使用图例显示各个类别。


4.3 图例位置

4.3.1 绘图区内部

>>> p.legend.location = 'bottom_left'

4.3.2 绘图区外部

>>> from bokeh.models import Legend
>>> r1 = p2.asterisk(np.array([1,2,3]), np.array([3,2,1])
>>> r2 = p2.line([1,2,3,4], [3,4,5,6])
>>> legend = Legend(items=[("One" ,[p1, r1]),("Two",[r2])], 
 location=(0, -30))
>>> p.add_layout(legend, 'right')

4.4 图例方向

>>> p.legend.orientation = "horizontal"
>>> p.legend.orientation = "vertical"

4.5 图例背景与边框

>>> p.legend.border_line_color = "navy"
>>> p.legend.background_fill_color = "white"

4.6 行列布局

4.6.1 行

>>> from bokeh.layouts import row
>>> layout = row(p1,p2,p3)

4.6.2 列

>>> from bokeh.layouts import columns
>>> layout = column(p1,p2,p3)

4.6.3 行列嵌套

>>>layout = row(column(p1,p2), p3)

4.7 栅格布局

>>> from bokeh.layouts import gridplot
>>> row1 = [p1,p2]
>>> row2 = [p3]
>>> layout = gridplot([[p1,p2],[p3]])

4.8 标签布局

>>> from bokeh.models.widgets import Panel, Tabs
>>> tab1 = Panel(child=p1, title="tab1")
>>> tab2 = Panel(child=p2, title="tab2")
>>> layout = Tabs(tabs=[tab1, tab2])

4.9 链接图

4.9.1 链接坐标轴

>>> p2.x_range = p1.x_range
>>> p2.y_range = p1.y_range

4.9.2 链接刷

>>> p4 = figure(plot_width = 100, tools='box_select,lasso_select')
>>> p4.circle('mpg', 'cyl', source=cds_df)
>>> p5 = figure(plot_width = 200, tools='box_select,lasso_select')
>>> p5.circle('mpg', 'hp', source=cds_df)
>>> layout = row(p4,p5)

五、输出与导出

5.1 Notebook

  使用 Bokeh 在Jupyter Notebook中进行输出。

>>> from bokeh.io import output_notebook, show
# 从 bokeh.io 模块导入 output_notebook 和 show 函数
>>> output_notebook()
# 用 output_notebook() 函数将 Bokeh 的输出设置为在 Jupyter Notebook 中显示。这样可以确保图形将直接嵌入到笔记本中,并且可以在笔记本中进行交互和查看

  Bokeh 图形将在 Jupyter Notebook 中嵌入的方式进行显示,并且可以在笔记本中进行交互和查看。


5.2 HTML

5.2.1 脱机HTML

  使用 Bokeh 的 file_html 函数将图形转换为 HTML 文件

>>> from bokeh.embed import file_html
>>> from bokeh.resources import CDN 
>>> html = file_html(p, CDN, "my_plot")

  通过执行上述代码,p 图形对象将被转换为一个包含 HTML 代码的字符串。这个 HTML 代码可以保存到一个文件中,或者集成到网页中,以显示和交互 Bokeh 图形

>>> from bokeh.io import output_file, show
>>> output_file('my_bar_chart.html', mode='cdn')

5.2.2 组件

  使用 Bokeh 的 components 函数将图形转换为 JavaScript 脚本和 HTML 分隔

>>> from bokeh.embed import components
>>> script, div = components(p)

5.3 PNG

  使用 Bokeh 的 export_png 函数将图形保存为 PNG 格式的图片文件

>>> from bokeh.io import export_png
>>> export_png(p, filename="plot.png")

  图形对象 p 将保存为一个名为 “plot.png” 的 PNG 图片文件。该文件将被保存在当前工作目录或指定的路径中,可以通过指定不同的文件名和路径来更改保存的位置和名称


5.4 SVG

  使用 Bokeh 的 export_svgs 函数将图形保存为 SVG 格式的矢量图文件

>>> from bokeh.io import export_svgs
>>> p.output_backend = "svg"
>>> export_svgs(p, filename="plot.svg")

  图形对象 p 将保存为一个名为 “plot.svg” 的 SVG 格式的矢量图文件。该文件将被保存在当前工作目录或指定的路径中,可以通过指定不同的文件名和路径来更改保存的位置和名称。如果图形非常复杂,可能会生成多个 SVG 文件。


六、显示或保存图形

  可以使用 Bokeh 的 show 函数save 函数显示和保存图形对象 p1 和 layout

>>> show(p1) >>> show(layout) 
>>> save(p1) >>> save(layout)


相关文章
Gbit与GByte比较
这段在看阿里的ECS指标,发现网络带宽的相关指标为Gbit/s,与平常的单位有些不同。先解释下差异并记录。
3851 0
Gbit与GByte比较
|
5月前
|
人工智能 供应链 安全
MCP Server的五种主流架构与Nacos的选择
本文深入探讨了Model Context Protocol (MCP) 在企业级环境中的部署与管理挑战,详细解析了五种主流MCP架构模式(直连远程、代理连接远程、直连本地、本地代理连接本地、混合模式)的优缺点及适用场景,并结合Nacos服务治理框架,提供了实用的企业级MCP部署指南。通过Nacos MCP Router,实现MCP服务的统一管理和智能路由,助力金融、互联网、制造等行业根据数据安全、性能需求和扩展性要求选择合适架构。文章还展望了MCP在企业落地的关键方向,包括中心化注册、软件供应链控制和安全访问等完整解决方案。
2791 157
MCP Server的五种主流架构与Nacos的选择
|
10月前
|
存储 数据挖掘 数据处理
掌握Pandas核心数据结构:Series与DataFrame的四种创建方式
本文介绍了 Pandas 库中核心数据结构 Series 和 DataFrame 的四种创建方法,包括从列表、字典、标量和 NumPy 数组创建 Series,以及从字典、列表的列表、NumPy 数组和 Series 字典创建 DataFrame,通过示例详细说明了每种创建方式的具体应用。
725 67
|
JSON 数据格式
Cesium绘制一个正方体
这篇文章详细说明了如何在Cesium中创建并精确控制一个厘米级精度的立方体模型。
232 2
Cesium绘制一个正方体
|
定位技术
Cesium修改地球的贴图为视频或者图片
这篇文章说明了如何在Cesium中修改地球的贴图,替换为自定义的图像或视频纹理。
446 1
Cesium修改地球的贴图为视频或者图片
|
10月前
|
机器学习/深度学习 数据采集 运维
数据分布检验利器:通过Q-Q图进行可视化分布诊断、异常检测与预处理优化
Q-Q图(Quantile-Quantile Plot)是一种强大的可视化工具,用于验证数据是否符合特定分布(如正态分布)。通过比较数据和理论分布的分位数,Q-Q图能直观展示两者之间的差异,帮助选择合适的统计方法和机器学习模型。本文介绍了Q-Q图的工作原理、基础代码实现及其在数据预处理、模型验证和金融数据分析中的应用。
1208 11
数据分布检验利器:通过Q-Q图进行可视化分布诊断、异常检测与预处理优化
|
人工智能 边缘计算 算法
CDGA|利用人工智能与边缘计算显著提升数据治理效率与效果的实践案例
​ 在当今数字化转型的浪潮中,数据已成为企业最宝贵的资产之一。然而,随着数据量的爆炸性增长,如何高效、安全地治理这些数据成为企业面临的重要挑战。人工智能(AI)与边缘计算技术的融合,为数据治理带来了前所未有的机遇。本文将通过实际案例,探讨如何利用AI与边缘计算显著提升数据治理的效率和效果。
|
运维 资源调度 监控
云上故障排查:高效定位与解决云端挑战的实战指南
加强监控与告警:建立完善的监控体系,确保能够及时发现并处理潜在问题。 定期演练与培训:定期组织故障排查演练和技能培训,提高团队的应对能力和专业水平。 注重数据保护与隐私:在故障排查过程中,严格遵守数据保护和隐私保护的相关规定,确保用户数据的安全。 结语 云上故障排查是一项复杂而艰巨的任务,需要企业和IT团队具备高度的专业素养和应对能力。通过遵循基本原则、运用有效工具与方法、遵循实战步骤并采纳最佳实践,我们可以
1231 0
|
机器学习/深度学习 人工智能 算法框架/工具
使用Python实现深度学习模型:智能身份验证与防伪
使用Python实现深度学习模型:智能身份验证与防伪
501 1
|
机器学习/深度学习 PyTorch 数据处理
数据增强与 DataLoader:提升模型泛化能力的策略
【8月更文第29天】在深度学习中,数据的质量和数量对于模型的性能至关重要。数据增强是一种常用的技术,它通过对原始数据进行变换(如旋转、缩放、裁剪等)来生成额外的训练样本,从而增加训练集的多样性和规模。这有助于提高模型的泛化能力,减少过拟合的风险。同时,`DataLoader` 是 PyTorch 中一个强大的工具,可以有效地加载和预处理数据,并支持并行读取数据,这对于加速训练过程非常有帮助。
1134 1