📜  Bokeh教程(1)

📅  最后修改于: 2023-12-03 15:29:38.212000             🧑  作者: Mango

Bokeh教程

Bokeh是一个Python交互式可视化库,它能够帮助程序员通过数据可视化来探索数据集并发现隐藏在其中的关系和规律。在本教程中,我们将深入了解Bokeh库,探索其各种功能和特性。

Bokeh基础
安装Bokeh

在安装Bokeh之前,请确保已经安装了Python环境。要安装Bokeh,可以使用pip安装:

pip install bokeh
Bokeh中的图表

Bokeh中有很多种不同类型的图表可以用来展示数据。下面是其中一些基础图表:

  • 线性图
  • 柱状图
  • 散点图
  • 区域图
  • 饼图
使用Bokeh创建图表

使用Bokeh创建图表非常简单。我们只需要导入必要的库,然后用数据填充一个图表对象即可。下面是一个例子:

from bokeh.plotting import figure, output_file, show

# 创建一个新的输出文件
output_file("example.html")

# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 创建一个线性图
p = figure(title="Line Chart Example", x_axis_label='X', y_axis_label='Y')

# 将数据填充到图表对象中
p.line(x, y)

# 显示图表
show(p)

在此示例中,我们使用Bokeh创建一个线性图表,并将其保存为一个HTML文件。然后,我们填充一些数据,并绘制一条线。最后,我们显示该图表。

Bokeh的交互性

Bokeh的一个独特特性就是它的交互性。可以使用它来创建具有以下交互特性的图表:

  • 缩放和平移
  • 工具提示
  • 选定和高亮显示

下面是一个交互性图表的例子:

from bokeh.models import HoverTool
from bokeh.plotting import figure, output_file, show

# 创建一个新的输出文件
output_file("example.html")

# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 创建一个线性图
p = figure(title="Interactive Line Chart Example", x_axis_label='X', y_axis_label='Y',
           tools="pan,wheel_zoom,box_zoom,reset,save")

# 将数据填充到图表对象中
p.line(x, y)

# 添加工具提示
hover = HoverTool()
hover.tooltips = [("X", "@x"), ("Y", "@y")]
p.add_tools(hover)

# 显示图表
show(p)

在此示例中,我们使用Bokeh创建了一个交互性线性图表。我们添加了缩放和平移工具、工具提示,可以用这些工具来探索数据并发现隐藏在其中的规律。

Bokeh高级用法
大规模数据可视化

Bokeh提供了一些可以处理大规模数据集的工具,包括:

  • 数据分组和聚合
  • 数据采样和降采样
  • 数据流和实时流可视化

下面是一个大规模数据可视化的例子:

from bokeh.plotting import figure, show
from bokeh.tile_providers import CARTODBPOSITRON
from bokeh.models import ColumnDataSource, CategoricalColorMapper
from bokeh.transform import factor_cmap
import pandas as pd

# 准备数据
url = 'https://data.austintexas.gov/resource/3syk-w9eu.csv?$limit=100000'
df = pd.read_csv(url)
df['latitude_round'] = df['latitude'].round(4)
df['longitude_round'] = df['longitude'].round(4)
source = ColumnDataSource(df)

# 创建地图
p = figure(x_range=(df['longitude'].min(), df['longitude'].max()), y_range=(df['latitude'].min(), df['latitude'].max()),
           x_axis_type="mercator", y_axis_type="mercator", title="Austin 311 Service Requests")
p.add_tile(CARTODBPOSITRON)

# 绘制散点图
mapper = CategoricalColorMapper(factors=df['issue_category'].unique().tolist(),
                                 palette=['#2980B9', '#F1948A', '#58D68D', '#AF7AC5', '#F7DC6F'])
p.circle(x='longitude', y='latitude', size=5, source=source, color={'field': 'issue_category', 'transform': mapper},
         alpha=0.5)

# 显示图表
show(p)

在此示例中,我们使用Bokeh和Pandas来可视化Austin的311服务请求数据。我们利用了Bokeh的地图功能,以及圆点的颜色编码来表示服务请求的类型。

Bokeh Server

Bokeh Server是Bokeh的另一个强大功能,它能够将可视化应用程序部署为Web应用程序,并允许用户与其进行交互。我们可以通过以下步骤使用Bokeh Server:

  1. 引入必要的库:

    from bokeh.plotting import figure, curdoc
    from bokeh.layouts import column
    from bokeh.models import ColumnDataSource
    from bokeh.models.widgets import Slider
    
  2. 创建一个初始数据源:

    source = ColumnDataSource(data=dict(x=[1, 2, 3, 4, 5], y=[2, 4, 6, 8, 10]))
    
  3. 创建一个交互性图表:

    plot = figure(plot_height=400, plot_width=400)
    plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6)
    
  4. 创建一个滑动条:

    slider = Slider(start=0, end=10, value=1, step=.1, title="Multiplier")
    
  5. 定义一个更新函数:

    def update(attr, old, new):
        data = dict(x=[1, 2, 3, 4, 5], y=[2, 4, 6, 8, 10])
        multiplier = slider.value
        for i in range(len(data['x'])):
            data['y'][i] = data['y'][i] * multiplier
        source.data = data
    
  6. 将滑动条的响应函数绑定到更新函数:

    slider.on_change('value', update)
    
  7. 把图表和滑动条组合在一起:

    layout = column(slider, plot)
    
  8. 把布局添加到文档中:

    curdoc().add_root(layout)
    

通过以上步骤,我们创建了一个交互性图表,并将其部署为Web应用程序。我们可以运行以下命令来启动本地服务器:

bokeh serve --show myapp.py

自此,我们就完成了Bokeh教程的介绍。希望这个教程能够帮助你更好地掌握Bokeh库,并利用数据可视化来做出更加精彩的发现!