from bokeh.io import output_notebook, show
from bokeh.plotting import figure
我们已经看到Bokeh怎么能够很好地与Python列表、NumPy数组、Pandas序列一起工作。在底层,这些输入数据被转换为Bokeh的ColumnDataSource
类型。这个数据类型是Bokeh使用的核心数据源对象。虽然Bokeh经常通过透明的方式创建该类型对象,但有些时候也需要通过显式的方式创建。
下一节,我们会看到hover tooltips,computed transforms 和 CustomJS interactions 等使用ColumnDataSource
的功能,所以,现在我们快速的瞄一眼。
从 bokeh.models
导入 ColumnDataSource
:
from bokeh.models import ColumnDataSource
ColumnDataSource
是从列名(字符串)到值序列的映射。下面是一个简单的例子。映射是通过传入Python dict
建立的,其字符串键作为列名,对应的Python list作为值序列。该值序列也可以是NumPy数组,或Pandas序列。
*注意:ColumnDataSource
中所有的列必须等长。*
source = ColumnDataSource(data={
'x' : [1, 2, 3, 4, 5],
'y' : [3, 7, 8, 5, 1],
})
到目前,我们已经通过直接传入文本列表或数组数据的方式调用函数,如p.circle
。当我们这样做时,Bokeh会自动帮我们创建一个 ColumnDataSource
。但我们也可以显式地把 ColumnDataSource
作为 source
参数传入glyph函数。当我们这样做时,如果我们想要给一个属性(如"x"
或 "y"
或 "fill_color"
)指定一个值序列,我们传入对应的*列名*:
p = figure(plot_width=400, plot_height=400)
p.circle('x', 'y', size=20, source=source)
show(p)
# Exercise: create a column data source with NumPy arrays as column values and plot it
通过Pandas Dataframe创建 ColumnDataSource
对象也很容易。只需要在创建 ColumnDataSource
的时候把Dataframe传入就行:
from bokeh.sampledata.iris import flowers as df
source = ColumnDataSource(df)
现在我们就可以使用这个对象绘制上例中的图了,把对应的列名传入glyph函数:
p = figure(plot_width=400, plot_height=400)
p.circle('petal_length', 'petal_width', source=source)
show(p)
# Exercise: create a column data source with the autompg sample data frame and plot it
from bokeh.sampledata.autompg import autompg_clean as df