使用 Bokeh 对数据进行交互式可视化
Bokeh是一个Python库,用于在 Web 浏览器中创建交互式数据可视化。它以视觉上令人愉悦的方式提供人类可读和快速的数据呈现。如果您以前在Python中使用过可视化,那么您很可能使用过 matplotlib。但 Bokeh 与 matplotlib 不同。
要安装 Bokeh,请在终端中输入以下命令。
pip install bokeh
为什么要使用散景?
matplotlib 和 Bokeh 的预期用途完全不同。 Matplotlib 创建静态图形,可用于快速简单的可视化或创建出版质量的图像。 Bokeh 创建用于在 Web 上显示的可视化(无论是本地的还是嵌入在网页中的),最重要的是,可视化是高度交互的。 Matplotlib 不提供这些功能中的任何一个。
如果您想与您的数据进行可视化交互,或者您想将交互式可视化数据分发给网络观众,Bokeh 就是您的理想之选!如果您的主要兴趣是为发布制作最终的可视化,那么 matplotlib 可能会更好,尽管 Bokeh 确实提供了一种创建静态图形的方法。
绘制一个简单的图形
对于这个例子,我们将使用内置数据集之一,即花数据集。我们可以使用circle()方法将每个数据点绘制为图形上的一个圆圈,我们还可以指定自定义属性,例如:
- first two elements has to be data on x-axis and y-axis respectively.
- color: to assign color dynamically as shown.
- fill_alpha: to assign opacity for circles.
- size: to assign size of each circle.
例子:
Python
from bokeh.plotting import figure, output_file, show
from bokeh.sampledata.iris import flowers
# assign custom colors to represent each
# class of data in a dictionary format
colormap = {'setosa': 'red', 'versicolor': 'green',
'virginica': 'blue'}
colors = [colormap[x] for x in flowers['species']]
# title for the graph
p = figure(title="Iris Morphology")
# label on x-axis
p.xaxis.axis_label = 'Petal Length'
# label on y-axis
p.yaxis.axis_label = 'Petal Width'
# plot each datapoint as a circle
# with custom attributes.
p.circle(flowers["petal_length"],
flowers["petal_width"],
color=colors,
fill_alpha=0.3,
size=15)
# you can save the output as an
# interactive html file
output_file("iris1.html", title="iris.py example")
# display the generated plot of graph
show(p)
Python
from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource
from bokeh.palettes import Spectral10
from bokeh.plotting import figure
from bokeh.transform import factor_cmap
output_file("fruits_bar_chart.html") #output save file name
# creating custom data
fruits = ['Apples', 'Pears', 'Nectarines',
'Plums', 'Grapes', 'Strawberries',
'bananas','berries','pineapples','litchi']
counts = [51, 34, 4, 28, 119, 79, 15, 68, 26, 88]
# mapping counts with classes as a dictionary
source = ColumnDataSource(data=dict(fruits=fruits,
counts=counts))
# initializing the figure
p = figure(x_range=fruits,
plot_width=800,
plot_height=350,
toolbar_location=None,
title="Fruit Counts")
# assigning various attributes to plot
p.vbar(x='fruits', top='counts',
width=1, source=source,
legend_field="fruits",
line_color='white',
fill_color=factor_cmap('fruits',
palette=Spectral10,
factors=fruits))
p.xgrid.grid_line_color = None
p.y_range.start = 0
p.y_range.end = 150
p.legend.orientation = "horizontal"
p.legend.location = "top_center"
# display output
show(p)
输出:
在上面的例子中, output_file()函数用于将生成的输出保存为 html 文件,因为 bokeh 使用 web 格式提供交互式显示。最后使用 show()函数显示生成的输出。
笔记:
- 红色 = Setosa,绿色 = Versicolor,蓝色 = Virginica
- 在每个可视化的右上角,都有散景提供的交互功能。它允许 1. 平移绘图,2. 使用框选择缩放,3. 使用滚轮缩放,4. 保存,5. 重置,6. 帮助
绘制条形图
对于这个例子,我们将在代码本身中使用使用列表的自定义创建数据集,即水果数据集。 output_file()函数用于将生成的输出保存为 html 文件,因为散景使用 Web 格式。我们可以使用ColumnDataSource()函数将相互创建的自定义数据集(两个列表)映射为字典格式。 figure()函数用于初始化图形,以便可以使用各种参数在其上绘制数据,例如:
- x_range :定义 x 轴上的数据。
- plot_width, plot_height :定义图形的宽度和高度。
- toolbar_location :定义工具栏的位置。
- title : 定义图形的标题。
这里我们使用简单的竖线来表示数据,因此我们使用 vbar() 方法并将各种属性分配给竖线,我们在其中传递不同的参数,例如:
- x : x 轴方向的数据
- top : y轴方向的数据
- width :定义每个条的宽度
- 来源:数据来源
- legend_field :显示数据中存在的类列表
- line_color : 定义图中线条的颜色
- fill_color : 为数据类定义不同的颜色
这里可以传递更多的参数。可以使用的其他一些属性是:
- y_range.start :用于定义 y 轴数据的下限。
- y_range.end :用于定义 y 轴数据的上限。
- legend.orientation :定义图例栏的方向。
- legend.location :定义图例栏的位置。
最后使用show()函数显示生成的输出。
例子:
Python
from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource
from bokeh.palettes import Spectral10
from bokeh.plotting import figure
from bokeh.transform import factor_cmap
output_file("fruits_bar_chart.html") #output save file name
# creating custom data
fruits = ['Apples', 'Pears', 'Nectarines',
'Plums', 'Grapes', 'Strawberries',
'bananas','berries','pineapples','litchi']
counts = [51, 34, 4, 28, 119, 79, 15, 68, 26, 88]
# mapping counts with classes as a dictionary
source = ColumnDataSource(data=dict(fruits=fruits,
counts=counts))
# initializing the figure
p = figure(x_range=fruits,
plot_width=800,
plot_height=350,
toolbar_location=None,
title="Fruit Counts")
# assigning various attributes to plot
p.vbar(x='fruits', top='counts',
width=1, source=source,
legend_field="fruits",
line_color='white',
fill_color=factor_cmap('fruits',
palette=Spectral10,
factors=fruits))
p.xgrid.grid_line_color = None
p.y_range.start = 0
p.y_range.end = 150
p.legend.orientation = "horizontal"
p.legend.location = "top_center"
# display output
show(p)
输出:
注意:这是一个静态图,也由 bokeh 提供,类似于 matplotlib。