📅  最后修改于: 2023-12-03 15:22:09.797000             🧑  作者: Mango
Bokeh 是一个 Python 库,用于创建交互式的 Web 绘图。它可以构建各种类型的可视化图表,包括散点图、折线图、面积图、条形图、热图、Treemap(树形图)和网络图,等等。
为了更好地了解 Bokeh,我们将介绍以下主题:
Bokeh 可以使用 pip 安装:
pip install bokeh
Bokeh 的基本元素是绘图和图表。您可以使用 Bokeh 创建各种类型的图表,包括散点图、折线图和条形图等。
以下是 Bokeh 基础的示例代码:
from bokeh.plotting import figure, output_file, show
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
output_file("line.html")
p = figure(title="Simple line example", x_axis_label='x', y_axis_label='y')
p.line(x, y, legend_label="Line", line_width=2)
show(p)
此代码将 x 和 y 的值用于绘制一条线。它还包括创建一个标题和标签,以及将图表保存为 HTML 文件。
以下是常见的 Bokeh 实例之一:散点图。
from bokeh.plotting import figure, output_file, show
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
output_file("scatter.html")
p = figure(title="Simple scatter example", x_axis_label='x', y_axis_label='y')
p.scatter(x, y, line_color=None)
show(p)
此代码将 x 和 y 的值用于创建散点图。它还包括创建一个标题和标签,以及将图表保存为 HTML 文件。
Bokeh 的布局功能使您能够将多个图表组合在一个页面上。使用 Bokeh 的“ gridplot”函数可以创建网格布局,其中每个图表位于页面上的特定位置。
以下是使用 Bokeh 进行布局的示例代码:
from bokeh.plotting import figure, gridplot, output_file, show
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
output_file("layout.html")
p1 = figure(title="Line example", x_axis_label='x', y_axis_label='y')
p1.line(x, y, legend_label="Line", line_width=2)
p2 = figure(title="Scatter example", x_axis_label='x', y_axis_label='y')
p2.scatter(x, y, line_color=None)
p3 = figure(title="Bar example", x_axis_label='x', y_axis_label='y')
p3.vbar(x=x, top=y, width=0.5)
grid = gridplot([p1, p2, p3], ncols=2, plot_width=400, plot_height=400)
show(grid)
此代码将三个图表放置在一个网格中。每个图表都有自己的标题和标签,而且可以单独显示。每个图表都保存在一个 HTML 文件中,可以通过单击页面中的链接来查看它们。
Bokeh 的交互式绘图功能使您能够通过鼠标单击、双击和拖动等方式对图表进行操作。可以双击图表上的点,以查看有关该点的详细信息,或者使用滑块控件更改图表中信息的时间点。
以下是 Bokeh 交互式绘图的示例代码:
from bokeh.layouts import column, row
from bokeh.models import CustomJS, ColumnDataSource, Slider
from bokeh.plotting import figure, output_file, show
output_file("slider.html")
source = ColumnDataSource(data=dict(x=[1, 2, 3, 4, 5], y=[5, 4, 3, 2, 1]))
p = figure()
p.line('x', 'y', source=source)
slider = Slider(start=0, end=10, step=1, value=5)
slider.js_on_change('value', CustomJS(args=dict(source=source), code="""
const data = source.data;
const v = cb_obj.value;
const x = data['x']
const y = data['y']
for (var i = 0; i < x.length; i++) {
y[i] = Math.pow(x[i], v)
}
source.change.emit();
"""))
show(row(p, slider))
此代码创建了一个简单的折线图,并添加了一个滑块,可以更改绘制的数据。当用户更改滑块的值时,JavaScript 代码会重新计算 y 值。在 Bokeh 库中,可以将 JavaScript 代码和 Python 代码混合使用。
Bokeh 回调函数在某些情况下很有用,例如当用户单击图表上的按钮或者拖动滑块时。回调函数可以告知 Bokeh 更新图表中的数据。
以下是 Bokeh 回调函数的示例代码:
from bokeh.layouts import column, row
from bokeh.models import CustomJS, ColumnDataSource, Button
from bokeh.plotting import figure, output_file, show
output_file("callback.html")
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
source = ColumnDataSource(data=dict(x=x, y=y))
p = figure()
p.line('x', 'y', source=source)
button = Button(label="Update", button_type="success")
button.js_on_click(CustomJS(args=dict(source=source), code="""
const data = source.data;
const y = data['y'];
for (var i = 0; i < y.length; i++) {
y[i] = Math.pow(y[i], 2)
}
source.change.emit();
"""))
show(column(p, button))
此代码创建了一个折线图和一个按钮。单击按钮时,将调用 JavaScript 回调函数,将 y 值的平方用于新的数据。该回调函数将触发 source.change.emit() 方法,这将通知 Bokeh 更新图表数据。
Bokeh 支持 DataFrame 和其他数据表格格式。它可以轻松将数据表换成图表,并轻松地对数据进行可视化。
以下是 Bokeh 数据表格的示例代码:
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, DataTable, TableColumn
import pandas as pd
output_file("data_table.html")
data = {'x': [1, 2, 3, 4, 5], 'y': [5, 4, 3, 2, 1]}
df = pd.DataFrame(data)
source = ColumnDataSource(df)
columns = [
TableColumn(field="x", title="X"),
TableColumn(field="y", title="Y"),
]
data_table = DataTable(source=source, columns=columns, width=400, height=280)
p = figure(title="Simple line example", x_axis_label='x', y_axis_label='y')
p.line('x', 'y', source=source)
layout = [[data_table], [p]]
show(layout)
此代码创建了一个带有数据表格的图表。数据表格包含 x 和 y 值,而图表显示 x 和 y 的线。单击数据表格中的列标头将对列进行排序。
Bokeh 支持将图表保存为常见的图像文件格式(例如 PNG、SVG 和 PDF),这些文件格式可以用于打印或在 Web 上共享。
以下是 Bokeh 导出图像的示例代码:
from bokeh.plotting import figure, output_file, export_png
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
output_file("image.png")
p = figure(title="Simple line example", x_axis_label='x', y_axis_label='y')
p.line(x, y, legend_label="Line", line_width=2)
export_png(p, filename="image.png")
此代码将绘制的图表保存为图像。您可以将“ export_png”替换为“ export_svg”或“ export_pdf”,以将图表保存为不同的图像格式。
Bokeh 还有许多未在本文章中介绍的功能,例如:
总之,Bokeh 是一种强大的 Python 库,可以用于创建交互式的 Web 绘图。它提供了许多功能和工具,可以轻松地创建各种各样的可视化图表。