第一步 8:提供和过滤数据#

上一步步指南 中,您使用了不同的方法来显示和导出您的可视化效果。

在本节中,您将使用各种来源和结构来导入和过滤数据。

使用 ColumnDataSource#

The ColumnDataSource 是 Bokeh 自己的数据结构。有关 ColumnDataSource 的详细信息,请参见用户指南中的 ColumnDataSource

到目前为止,您一直使用 Python 列表和 NumPy 数组等数据序列将数据传递给 Bokeh。Bokeh 会自动将这些列表转换为 ColumnDataSource 对象,供您使用。

请按照以下步骤直接创建一个 ColumnDataSource

  • 首先,导入 ColumnDataSource

  • 接下来,创建一个包含您数据的字典:字典的键是列名(字符串)。字典的值是数据列表或数组。

  • 然后,将您的字典作为 data 参数传递给 ColumnDataSource

  • 然后,您可以将您的 ColumnDataSource 用作渲染器的 source

from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource

# create dict as basis for ColumnDataSource
data = {'x_values': [1, 2, 3, 4, 5],
        'y_values': [6, 7, 2, 3, 6]}

# create ColumnDataSource based on dict
source = ColumnDataSource(data=data)

# create a plot and renderer with ColumnDataSource data
p = figure(height=250)
p.scatter(x='x_values', y='y_values', size=20, source=source)
show(p)

另请参见

有关 Bokeh 的 ColumnDataSource 的更多信息,请参见用户指南中的 ColumnDataSource 和参考指南中的 ColumnDataSource

有关将数据添加到 ColumnDataSource 的信息,请参见用户指南中的 将数据追加到 ColumnDataSource。有关替换 ColumnDataSource 数据的信息,请参见用户指南中的 替换 ColumnDataSource 中的数据

有关使用 Python 列表的更多信息,请参见 使用 Python 列表提供数据。有关使用 NumPy 数据与 Bokeh 的更多信息,请参见 提供 NumPy 数据

转换 pandas 数据#

要使用 pandas DataFrame 中的数据,请将您的 pandas 数据传递给 ColumnDataSource

source = ColumnDataSource(df)

另请参见

有关在 Bokeh 中使用 pandas 数据的更多信息,请参见用户指南中的 使用 pandas DataFrame。这包括有关使用 pandas DataFrameMultiIndexGroupBy 数据的信息。

过滤数据#

Bokeh 带有各种过滤方法。如果您想创建 ColumnDataSource 中包含数据的特定子集,请使用这些过滤器。

在 Bokeh 中,这些过滤后的子集称为“视图”。视图由 Bokeh 的 CDSView 类表示。

要使用过滤后的数据子集进行绘图,请将 CDSView 对象传递给渲染器的 view 参数。

A CDSView 对象有一个属性

  • filterFilter 模型的实例

最简单的过滤器是 IndexFilter。IndexFilter 使用索引位置列表,并创建一个仅包含位于这些索引位置的数据点的视图。

例如,如果您的 ColumnDataSource 包含五个值的列表,并且您应用具有 [0,2,4] 的 IndexFilter,则结果 view 仅包含原始列表的第一个、第三个和第五个值

from bokeh.layouts import gridplot
from bokeh.models import CDSView, ColumnDataSource, IndexFilter
from bokeh.plotting import figure, show

# create ColumnDataSource from a dict
source = ColumnDataSource(data=dict(x=[1, 2, 3, 4, 5], y=[1, 2, 3, 4, 5]))

# create a view using an IndexFilter with the index positions [0, 2, 4]
view = CDSView(filter=IndexFilter([0, 2, 4]))

# setup tools
tools = ["box_select", "hover", "reset"]

# create a first plot with all data in the ColumnDataSource
p = figure(height=300, width=300, tools=tools)
p.scatter(x="x", y="y", size=10, hover_color="red", source=source)

# create a second plot with a subset of ColumnDataSource, based on view
p_filtered = figure(height=300, width=300, tools=tools)
p_filtered.scatter(x="x", y="y", size=10, hover_color="red", source=source, view=view)

# show both plots next to each other in a gridplot layout
show(gridplot([[p, p_filtered]]))

另请参见

有关 Bokeh 中各种过滤器的更多信息,请参见用户指南中的 过滤数据。参考指南中 CDSViewFilter 的条目中也提供了更多信息。