Python可视化框架Bokeh:制作交互式数据可视化! Python可视化的一个重要应用场景就是制作交互式数据可视化。而在这方面,Bokeh可谓是目前最受欢迎的Python可视化框架之一。Bokeh让我们可以创建复杂的图表、交互式图形用户界面和数据应用程序,而且非常适合展示大规模数据集和多面向的数据。这篇文章将详细介绍Bokeh的一些技术知识点,让你快速掌握Bokeh的使用方法,并且为你的数据可视化增加更多的交互性。 Bokeh的安装 首先,我们需要通过pip安装Bokeh: ``` pip install bokeh ``` Bokeh中的基本概念 在使用Bokeh之前,我们需要先了解一下Bokeh中的一些基本概念。 1.Bokeh的plot:plot是Bokeh的基本绘图对象,它可以包含一组图形,如折线、散点、柱状图等。一个plot可以通过调用函数bokeh.plotting.figure()来创建。 2.Bokeh的ColumnDataSource:ColumnDataSource是一个类,它可以将数据存储为列。这种方式非常适合于数据集比较大或者需要进行交互式数据可视化的情况。ColumnDataSource可以通过传入一个字典或者pandas数据框来创建。 3.Bokeh的Glyphs:glyphs是Bokeh中的基本图形元素,它定义了一种可渲染的几何形状,包括线、圆、矩形、图像等等。 4.Bokeh的Widgets:Widget是Bokeh中交互控件的概念,它可以是一个按钮、单选框、下拉框等等。 绘制一张简单的折线图 下面,我们将展示如何通过Bokeh绘制一张简单的折线图。 首先,我们需要导入Bokeh的相关模块: ``` from bokeh.plotting import figure, output_file, show ``` 接着,我们创建一个新的plot对象: ``` p = figure(title="简单折线图") ``` 然后,我们创建一个数据集: ``` x = [1, 2, 3, 4, 5] y = [6, 7, 2, 4, 5] ``` 接下来,我们通过line()方法将数据集添加到plot对象中: ``` p.line(x, y, legend="折线", line_width=2) ``` 最后,我们通过show()将plot对象展示出来: ``` show(p) ``` 执行完成之后,会在浏览器中打开一张简单的折线图。 绘制交互式数据可视化图表 在Bokeh中,我们可以通过ColumnDataSource来实现交互式数据可视化。下面,我们将通过一个简单的例子演示如何使用ColumnDataSource和widgets来实现交互式数据可视化。 这里,我们假设有一个数据集,其中包括了不同城市的名称、人口和面积,我们将会绘制一个散点图,其中x轴是城市面积,y轴是城市人口,城市的名称将会出现在鼠标悬停时。 下面是我们的代码实现: ``` from bokeh.plotting import figure, output_file, show from bokeh.models import ColumnDataSource, HoverTool from bokeh.layouts import widgetbox from bokeh.models.widgets import Select import pandas as pd # 从csv文件中读取数据 data = pd.read_csv('city_data.csv') # 城市名称 cities = data['city'].tolist() # 创建一个ColumnDataSource对象 # ColumnDataSource可以将数据存储为列,比较适合于较大的数据集 source = ColumnDataSource(data=dict(x=data['area'], y=data['population'], city=cities)) # 创建一个plot对象 p = figure(title='城市人口和面积散点图', plot_height=400, plot_width=600, tools="lasso_select, box_select, reset") # 添加一个散点图 # 我们使用circle()方法添加一个散点图,其中x轴是城市面积,y轴是城市人口 # 散点图的颜色设置为“橙色” p.circle('x', 'y', source=source, color='orange') # 定义一个Hover工具 # 当鼠标指向散点图时,城市名称将会自动显示 hover = HoverTool(tooltips=[("城市名称", "@city")]) p.add_tools(hover) # 定义一个下拉列表 options = ['area', 'population'] select = Select(title='选择数据', value=options[0], options=options) # 定义一个回调函数 # 当下拉列表中选择不同的选项时,散点图的x、y数据将会被更新 def update_data(attrname, old, new): y = data[select.value].tolist() source.data = dict(x=data['area'], y=y, city=cities) # 将下拉列表和回调函数绑定 # 当下拉列表发生改变时,将会触发回调函数 select.on_change('value', update_data) # 将下拉列表和散点图放在一个布局中 layout = widgetbox(select, p) # 展示布局 show(layout) ``` 在执行完成后,会在浏览器中打开一个交互式散点图。当鼠标指向散点图时,城市名称会显示出来。当下拉列表中选择了不同的选项时,散点图的数据将会自动更新。 总结 Bokeh是一个功能强大的Python可视化框架,它可以让我们快速创建交互式数据可视化图表和数据应用程序。本文中,我们介绍了Bokeh的一些基本概念和技术知识点,并且演示了如何通过Bokeh绘制一张简单的折线图和一张交互式散点图。如果你对Python数据可视化有兴趣,那么Bokeh绝对会是一个值得尝试的工具。