匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Python 数据可视化:详解 Bokeh 库的使用

Python 数据可视化:详解 Bokeh 库的使用

数据可视化是数据分析和数据挖掘中极其重要的一环,通过图表和图形的展示,可以更加直观地呈现数据分布、趋势以及关联关系,进而帮助我们更好地理解数据,做出更加明智的决策。Python 作为一门强大的编程语言,自然也有诸多用于数据可视化的优秀工具和库,其中 Bokeh 库是一款广受欢迎的高级数据可视化库之一。本文将详细介绍 Bokeh 库的使用,包括 Bokeh 特点的介绍、Bokeh 库的安装和环境配置、基本绘图操作以及高级可视化操作等方面。

一、Bokeh 特点介绍

Bokeh 是一款 Python 的交互式数据可视化库,它利用了现代 Web 浏览器的强大功能,提供了丰富的图形组件和工具,能够方便地创建高质量的交互式图表、图形和数据应用程序。Bokeh 的主要特点包括以下几点:

1. 易于使用

Bokeh 提供了简单易用的 API,可以轻松创建各种类型的图表和图形,用户可以通过简单的 Python 代码探索和展示数据。同时,Bokeh 还提供了一套完整的文档,其中包括丰富的示例和教程,使新手也能快速上手。

2. 强大的交互功能

Bokeh 提供了丰富的交互功能,包括鼠标悬停、点击、缩放、平移等多种形式,用户可以通过鼠标与图表交互,进一步探索数据,发现数据背后的规律和关联,并进行更加深入的分析。

3. 可扩展性强

Bokeh 可以与 Python 框架(如 Flask、Django)和前端框架(如 React、Vue)等自由组合,同时也支持 Jupyter Notebook 和 JupyterLab 等数据科学工具,用户可以灵活选择扩展方式,满足不同的需求。

4. 适用于大规模数据

Bokeh 能够轻松处理海量数据,可以绘制十万级别的数据点并且不会影响交互速度和性能。

5. 高质量图表和图形输出

Bokeh 提供了多种输出格式,包括 HTML、Jupyter Notebook、PNG、SVG、PDF 等,用户可以轻松输出高质量的图表和图形。

二、Bokeh 库的安装和环境配置

Bokeh 可以通过 pip 安装,可以使用以下命令安装:

```python
!pip install bokeh
```

安装完成后,还需要配置以下环境变量:

```python
import bokeh, bokeh.io
bokeh.io.output_notebook()
```

以上代码是在 Jupyter Notebook 环境中需要执行的,用于在 Notebook 中显示生成的图表和图形。

三、基本绘图操作

Bokeh 库提供了多种图表和图形的绘制方式,包括线图(Line)、散点图(Scatter)、柱状图(Bar)、饼图(Pie)等常见的图表类型,以及热力图(Heatmap)、地图(Map)、网络图(Network)等高级可视化类型。下面我们将通过一个简单的例子,演示 Bokeh 库绘制线图的基本操作。

```python
# 导入必要的库
from bokeh.plotting import figure, output_file, show
import numpy as np

# 定义数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

# 创建一个绘图对象
p = figure(title='Sin Function', x_axis_label='x', y_axis_label='y')

# 绘制线条
p.line(x, y, legend_label="sin(x)")

# 输出图表到文件并显示
output_file('sin.html')
show(p)
```

以上代码首先导入了必要的库,然后定义了一个 x 和 y 数组,分别表示 x 轴和 y 轴的数据。接着创建了一个绘图对象 p,定义了图表的标题和 x 轴、y 轴的标签。最后调用 line 方法绘制了一条折线,并输出图表到文件 sin.html,并在 Notebook 中显示。

运行以上代码,可以看到绘制出了一张 sin 函数图,如下图所示:

![sin 函数图](https://raw.githubusercontent.com/buzhengzhe/articles/master/assets/images/bokeh/sin.png)

可以看到通过少量的 Python 代码,就能够绘制出一个好看、易于理解的可视化图表。

四、高级可视化操作

Bokeh 库不仅支持常见的图表类型,还支持多种高级的数据可视化类型,本节将简单介绍其中的两种:Heatmap 和 Network。

1. Heatmap

热力图是一种常用的数据可视化方式,通过色块的不同颜色呈现数据的分布和密度,是探索数据空间的有力手段。Bokeh 库通过 HeatMap 方法提供了绘制热力图的功能,下面是一个简单的例子。

```python
# 导入必要的库
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColorBar, LinearColorMapper
from bokeh.palettes import Spectral6
import numpy as np

# 定义数据
n = 100
x = np.random.random(n) * 10
y = np.random.random(n) * 10
data = np.random.normal(size=(n, n))

# 定义颜色映射
color_mapper = LinearColorMapper(palette=Spectral6, low=data.min(), high=data.max())

# 创建绘图对象
p = figure(title='Heatmap', x_axis_label='x', y_axis_label='y', x_range=(0, 10), y_range=(0, 10))

# 绘制热力图
p.rect(x, y, 1, 1, source=data, line_color=None, fill_color={'field': 'value', 'transform': color_mapper})

# 添加色条
color_bar = ColorBar(color_mapper=color_mapper, location=(0, 0))
p.add_layout(color_bar, 'right')

# 输出图表到文件并显示
output_file('heatmap.html')
show(p)
```

以上代码首先定义了数据 x、y 和 data,其中 data 是一个二维数组,用于表示热力图的数据分布。接着定义了一个颜色映射 color_mapper,用于将数据值映射到颜色,然后创建了一个绘图对象 p,定义了图表的标题和 x 轴、y 轴的标签,以及 x、y 轴的范围。最后调用 rect 方法绘制了热力图,并添加了一个色条 color_bar,用于表示颜色映射。输出图表到文件 heatmap.html,并在 Notebook 中显示。

运行以上代码,可以看到绘制出了一张 100x100 的热力图,如下图所示:

![热力图](https://raw.githubusercontent.com/buzhengzhe/articles/master/assets/images/bokeh/heatmap.png)

可以看到通过 Bokeh 库,可以轻松绘制出高品质的热力图,并将其输出到文件或 Notebook 中。

2. Network

网络图是一种重要的数据可视化类型,通过节点和边的连接关系呈现数据的关联和分布。Bokeh 库通过 GraphRenderer 方法提供了绘制网络图的功能,下面是一个简单的例子。

```python
# 导入必要的库
from bokeh.plotting import figure, output_file, show
from bokeh.models.graphs import GraphRenderer
from bokeh.models import Circle, HoverTool, StaticLayoutProvider, ColumnDataSource
from bokeh.palettes import Spectral4
import numpy as np

# 定义数据
n = 20
nodes = list(range(n))
edges = [(np.random.randint(0, n), np.random.randint(0, n)) for i in range(n)]
colors = Spectral4

# 创建 GraphRenderer 对象
graph = GraphRenderer()

# 创建节点数据
node_source = ColumnDataSource(data=dict(index=nodes, fill_color=colors))

# 创建边数据
edge_source = ColumnDataSource(data=dict(start=[e[0] for e in edges], end=[e[1] for e in edges]))

# 创建节点图形和节点颜色
graph.node_renderer.data_source.data = node_source.data
graph.node_renderer.glyph = Circle(size=15, fill_color='fill_color')

# 创建边图形和边颜色
graph.edge_renderer.data_source.data = edge_source.data
graph.edge_renderer.glyph.line_alpha = 0.8
graph.edge_renderer.glyph.line_width = 1.5

# 将节点和边添加到绘图对象
plot = figure(title='Network', x_range=(-1.1, 1.1), y_range=(-1.1, 1.1))
plot.renderers.append(graph)

# 添加节点悬停工具
hover = HoverTool(tooltips=[('index', '@index')])
plot.add_tools(hover)

# 输出图表到文件并显示
output_file('network.html')
show(plot)
```

以上代码首先定义了数据 nodes、edges 和 colors,其中 nodes 是节点列表,edges 是边列表,colors 是颜色列表。接着创建了一个 GraphRenderer 对象,用于绘制网络图,然后创建了节点数据 node_source 和边数据 edge_source,并分别将其与 GraphRenderer 对象的节点渲染器和边渲染器关联。最后创建了一个绘图对象 plot,并将 GraphRenderer 对象添加到其中,同时添加了一个节点悬停工具 HoverTool,用于显示节点的信息。输出图表到文件 network.html,并在 Notebook 中显示。

运行以上代码,可以看到绘制出了一张 20 节点的网络图,如下图所示:

![网络图](https://raw.githubusercontent.com/buzhengzhe/articles/master/assets/images/bokeh/network.png)

可以看到 Bokeh 库提供了高度可定制化的网络图绘制功能,方便用户灵活探索和展示数据。

五、总结

Bokeh 库是 Python 中一款功能强大的交互式数据可视化库,提供了丰富的图形组件和工具,能够方便地创建高质量的交互式图表、图形和数据应用程序。通过本文的介绍,我们了解了 Bokeh 库的特点和优势,学习了 Bokeh 库的安装和环境配置,以及基本绘图操作和高级可视化操作等方面的知识。希望读者能够通过本文的介绍掌握 Bokeh 库的基本用法,并能够利用该库进行更加深入和高级的数据可视化操作。