Bokeh 是一个用于创建交互式数据可视化图形的 Python 库。它支持现代 Web 浏览器,并且可以生成 HTML 和 JavaScript 文件,这意味着 Bokeh 图表可以直接嵌入到 Web 页面中,非常适合用于创建动态的 Web 应用程序。Bokeh 的一大优势在于它支持大规模数据集,并且可以实现实时数据更新,非常适合流数据的可视化。

主要特点
  • 交互性:Bokeh 图表支持缩放、平移、悬停查看数据点详情等交互功能。
  • Web 兼容性:生成的图表可以在现代 Web 浏览器中直接显示,无需任何插件。
  • 大规模数据集:Bokeh 能够处理大规模数据集,并且支持流数据的实时更新。
  • 多平台支持:可以在多种操作系统和编程环境中使用。
  • 多种图表类型:支持折线图、散点图、柱状图、热图等多种图表类型。
  • 自定义和扩展:Bokeh 提供了丰富的自定义选项,并且可以轻松扩展其功能。
安装 Bokeh

如果你还没有安装 Bokeh,可以使用 pip 或 conda 来安装:


sh

深色版本

1pip install bokeh

或者


sh

深色版本

1conda install -c bokeh bokeh
示例代码

下面是一些使用 Bokeh 绘制不同类型图形的例子。

1. 简单的折线图

python

深色版本

1from bokeh.plotting import figure, show, output_notebook
2from bokeh.models import ColumnDataSource
3import numpy as np
4
5# 生成一些示例数据
6x = np.linspace(0, 4*np.pi, 100)
7y = np.sin(x)
8
9# 创建一个数据源
10source = ColumnDataSource(data=dict(x=x, y=y))
11
12# 创建一个图形
13p = figure(title="Simple line example", x_axis_label='x', y_axis_label='y')
14
15# 添加折线图
16p.line('x', 'y', source=source, line_width=2)
17
18# 显示图形
19output_notebook()  # 如果在 Jupyter Notebook 中使用
20show(p)
2. 交互式散点图

python

深色版本

1# 生成一些示例数据
2x = np.random.normal(size=400)
3y = np.random.normal(size=400)
4
5# 创建一个数据源
6source = ColumnDataSource(data=dict(x=x, y=y))
7
8# 创建一个图形
9p = figure(title="Interactive Scatter Plot", tools="pan,wheel_zoom,box_zoom,reset,hover,previewsave",
10           x_axis_label='x', y_axis_label='y')
11
12# 添加散点图
13p.circle('x', 'y', source=source, fill_alpha=0.6, size=10)
14
15# 显示图形
16show(p)
3. 柱状图

python

深色版本

1# 生成一些示例数据
2fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
3counts = [5, 3, 4, 7, 2, 4]
4
5# 创建一个数据源
6source = ColumnDataSource(data=dict(fruits=fruits, counts=counts))
7
8# 创建一个图形
9p = figure(x_range=fruits, plot_height=350, title="Fruit Counts",
10           toolbar_location=None, tools="")
11
12# 添加柱状图
13p.vbar(x='fruits', top='counts', width=0.9, source=source, legend_field="fruits",
14       line_color='white', fill_color="#c9d9d3")
15
16# 显示图形
17show(p)
4. 多面板图表

python

深色版本

1from bokeh.layouts import gridplot
2
3# 生成一些示例数据
4x = np.linspace(0, 4*np.pi, 100)
5y1 = np.sin(x)
6y2 = np.cos(x)
7
8# 创建两个数据源
9source1 = ColumnDataSource(data=dict(x=x, y=y1))
10source2 = ColumnDataSource(data=dict(x=x, y=y2))
11
12# 创建两个图形
13p1 = figure(title="Sine Wave", x_axis_label='x', y_axis_label='y')
14p1.line('x', 'y', source=source1, line_width=2)
15
16p2 = figure(title="Cosine Wave", x_axis_label='x', y_axis_label='y')
17p2.line('x', 'y', source=source2, line_width=2)
18
19# 创建网格布局
20grid = gridplot([[p1, p2]])
21
22# 显示图形
23show(grid)
5. 地图

python

深色版本

1from bokeh.sampledata.sample_geojson import geojson
2
3# 加载地理数据
4geo_source = GeoJSONDataSource(geojson=geojson)
5
6# 创建一个图形
7p = figure(title="Sample GeoJSON Data", plot_width=600, plot_height=400,
8           x_axis_type="mercator", y_axis_type="mercator")
9
10# 添加地理数据
11p.patches('xs', 'ys', source=geo_source, fill_color='blue', fill_alpha=0.8, line_color='black')
12
13# 显示图形
14show(p)
总结

Bokeh 是一个非常强大的交互式数据可视化库,它支持多种图表类型,并且可以生成可以直接嵌入到 Web 页面中的图表。通过上述示例可以看出,Bokeh 不仅能够创建简单的图表,还能处理复杂的交互式图表,非常适合用于 Web 应用程序的开发。Bokeh 的灵活性和强大的功能使其成为了数据科学家和 Web 开发者的重要工具之一。无论是简单的折线图还是复杂的地理空间数据可视化,Bokeh 都能够胜任。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐