📜  使用 Bokeh 对数据进行交互式可视化

📅  最后修改于: 2022-05-13 01:55:21.417000             🧑  作者: Mango

使用 Bokeh 对数据进行交互式可视化

Bokeh是一个Python库,用于在 Web 浏览器中创建交互式数据可视化。它以视觉上令人愉悦的方式提供人类可读和快速的数据呈现。如果您以前在Python中使用过可视化,那么您很可能使用过 matplotlib。但 Bokeh 与 matplotlib 不同。

要安装 Bokeh,请在终端中输入以下命令。

pip install bokeh

为什么要使用散景?

matplotlib 和 Bokeh 的预期用途完全不同。 Matplotlib 创建静态图形,可用于快速简单的可视化或创建出版质量的图像。 Bokeh 创建用于在 Web 上显示的可视化(无论是本地的还是嵌入在网页中的),最重要的是,可视化是高度交互的。 Matplotlib 不提供这些功能中的任何一个。

如果您想与您的数据进行可视化交互,或者您想将交互式可视化数据分发给网络观众,Bokeh 就是您的理想之选!如果您的主要兴趣是为发布制作最终的可视化,那么 matplotlib 可能会更好,尽管 Bokeh 确实提供了一种创建静态图形的方法。

绘制一个简单的图形

对于这个例子,我们将使用内置数据集之一,即花数据集。我们可以使用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。