Python 数据可视化库之bokeh使用详解

发布时间:2024年01月17日


概要

数据可视化在数据分析和报告中扮演着关键角色,而Python的Bokeh库为创建交互式、具有吸引力的可视化图表提供了强大的工具。本文将介绍Bokeh的基本概念、安装方法以及详细的示例代码,以帮助大家了解如何使用Bokeh创建出色的数据可视化。


什么是Bokeh?

Bokeh是一个Python库,用于创建交互式的、现代化的Web可视化工具。它允许用户创建各种类型的图表,包括线图、散点图、柱状图、热图等,而且这些图表都可以在Web浏览器中交互式地操作。

Bokeh的主要特点包括:

  • 交互性:Bokeh提供了丰富的交互性选项,使用户能够在图表上进行缩放、平移、选择数据点等操作。

  • 现代化的外观:Bokeh的图表外观非常现代化和吸引人,可以定制颜色、线条样式等。

  • 多种输出格式:Bokeh支持多种输出格式,包括HTML、Jupyter Notebook、交互式应用程序等。

  • 无需前端开发经验:使用Bokeh,不需要具备前端开发的经验,就可以创建交互式的Web可视化。

  • 支持大数据集:Bokeh能够有效地处理大数据集,因此适用于各种规模的数据分析任务。

安装Bokeh

要开始使用Bokeh,首先需要安装它。可以使用pip来安装Bokeh:

pip?install?bokeh

安装完成后,就可以在Python代码中导入Bokeh并开始使用它。

基本用法

创建简单的图表

一个简单的示例开始,创建一个基本的折线图:

from?bokeh.plotting?import?figure,?output_file,?show

#?创建一个输出HTML文件
output_file("simple_line_chart.html")

#?创建一个图表对象
p?=?figure(title="Simple?Line?Chart",?x_axis_label="X-axis",?y_axis_label="Y-axis")

#?添加数据点
x?=?[1,?2,?3,?4,?5]
y?=?[6,?7,?2,?4,?5]

#?绘制折线
p.line(x,?y,?line_width=2)

#?显示图表
show(p)

在这个示例中,首先创建一个输出HTML文件,然后创建一个图表对象(p)。接下来,定义了X和Y轴的数据点,并使用p.line方法绘制了折线。最后,使用show函数来显示图表。

添加交互性

Bokeh的一个强大之处在于它的交互性。

一个添加交互性的示例:

from?bokeh.plotting?import?figure,?output_file,?show
from?bokeh.models?import?HoverTool

#?创建一个输出HTML文件
output_file("interactive_line_chart.html")

#?创建一个图表对象
p?=?figure(title="Interactive?Line?Chart",?x_axis_label="X-axis",?y_axis_label="Y-axis")

#?添加数据点
x?=?[1,?2,?3,?4,?5]
y?=?[6,?7,?2,?4,?5]

#?绘制折线
line?=?p.line(x,?y,?line_width=2)

#?添加悬停工具
hover?=?HoverTool()
hover.tooltips?=?[("X",?"@x"),?("Y",?"@y")]
p.add_tools(hover)

#?显示图表
show(p)

在这个示例中,添加了一个悬停工具(HoverTool),当鼠标悬停在数据点上时,会显示X和Y的值。这增加了图表的交互性,使用户能够查看数据的详细信息。

绘制多个图表

Bokeh还可以绘制多个图表并将它们组合在一起。

以下是一个示例,演示如何创建一个包含多个子图表的布局:

from?bokeh.plotting?import?figure,?output_file,?show
from?bokeh.layouts?import?gridplot

#?创建一个输出HTML文件
output_file("multiple_subplots.html")

#?创建多个图表对象
p1?=?figure(title="Subplot?1")
p2?=?figure(title="Subplot?2")
p3?=?figure(title="Subplot?3")
p4?=?figure(title="Subplot?4")

#?添加数据点
x?=?[1,?2,?3,?4,?5]
y1?=?[6,?7,?2,?4,?5]
y2?=?[5,?4,?3,?2,?1]
y3?=?[1,?2,?1,?2,?1]
y4?=?[3,?2,?4,?1,?5]

#?绘制子图表
p1.line(x,?y1)
p2.line(x,?y2)
p3.line(x,?y3)
p4.line(x,?y4)

#?创建一个子图表布局
layout?=?gridplot([[p1,?p2],?[p3,?p4]])

#?显示图表
show(layout)

在这个示例中,创建了四个子图表(p1p2p3p4),然后使用gridplot将它们组合成一个2x2的布局。最后,使用show函数来显示整个布局。

高级用法

绘制3D图形

Bokeh不仅支持2D图形,还支持绘制3D图形。要绘制3D图形,可以使用Bokeh的figure模块中的figure()函数并指定output_backend='webgl'参数来启用WebGL渲染。然后,可以使用3D绘图方法,如line3d()scatter3d()来创建3D图形。

from?bokeh.plotting?import?figure,?output_file,?show

#?创建一个输出HTML文件
output_file("3d_plot.html")

#?创建3D图表对象
p?=?figure(title="3D?Plot",?output_backend='webgl')

#?添加数据点
x?=?[1,?2,?3,?4,?5]
y?=?[6,?7,?2,?4,?5]
z?=?[3,?2,?4,?1,?5]

#?绘制3D散点图
p.scatter3d(x,?y,?z,?size=10)

#?显示图表
show(p)

创建交互式小部件

Bokeh支持创建交互式小部件,这些小部件可以让用户与图表进行互动。例如,可以创建一个滑块小部件,用于动态调整图表中的参数,或创建一个复选框小部件,用于切换不同的数据视图。

from?bokeh.plotting?import?figure,?curdoc
from?bokeh.models?import?Slider

#?创建一个图表对象
p?=?figure(title="Interactive?Plot",?x_axis_label="X-axis",?y_axis_label="Y-axis")

#?添加数据点
x?=?[1,?2,?3,?4,?5]
y?=?[6,?7,?2,?4,?5]

#?绘制折线
line?=?p.line(x,?y,?line_width=2)

#?创建一个滑块小部件
slider?=?Slider(start=0.1,?end=2,?step=0.1,?value=1,?title="Line?Width")

#?定义滑块变化时的回调函数
def?update_line_width(attr,?old_value,?new_value):
????line.line_width?=?new_value

#?将回调函数与滑块小部件绑定
slider.on_change('value',?update_line_width)

#?将图表和滑块小部件放入文档
curdoc().add_root(p)
curdoc().add_root(slider)

这个示例中,创建了一个滑块小部件,并定义了一个回调函数,当滑块的值变化时,会更新图表的折线宽度。

嵌入Bokeh图表到Flask应用程序

可以将Bokeh图表嵌入到Web应用程序中,例如使用Flask框架。首先,需要创建一个Flask应用程序,并使用Bokeh的components()函数将图表组件嵌入到HTML模板中。

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

app?=?Flask(__name__)

@app.route('/')
def?index():
????#?创建一个图表对象
????p?=?figure(title="Embedded?Bokeh?Plot")
????
????#?添加数据点
????x?=?[1,?2,?3,?4,?5]
????y?=?[6,?7,?2,?4,?5]
????
????#?绘制折线
????p.line(x,?y,?line_width=2)
????
????#?将图表组件嵌入到HTML模板中
????script,?div?=?components(p)
????
????return?render_template('index.html',?script=script,?div=div)

if?__name__?==?'__main__':
????app.run()

在上述示例中,创建了一个Flask应用程序,定义了一个路由处理函数,将Bokeh图表组件嵌入到HTML模板中,并在浏览器中渲染。

总结

Bokeh是一个功能丰富的Python库,用于创建交互式和现代化的数据可视化。无论是进行数据分析、报告生成还是构建Web应用程序,Bokeh都是一个强大的工具。希望本文的介绍和示例有助于大家入门Bokeh,并开始在Python项目中创建引人注目的数据可视化。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

文章来源:https://blog.csdn.net/Rocky006/article/details/135384715
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。