Pandas更改绘图后端以获得交互式绘图

Pandas更改绘图后端以获得交互式绘图

在本文中,我们将介绍如何将Pandas绘图后端从Matplotlib更改为Bokeh,以获得交互式绘图,增强数据可视化的效果。

阅读更多:Pandas 教程

什么是绘图后端

在使用Pandas进行数据分析时,可以使用其提供的绘图函数来绘制各种类型的图表,如条形图、折线图、饼图等。绘图函数之所以能够完成绘制任务,是因为它们基于一个底层的绘图库来实现图像输出。

默认情况下,Pandas使用的是Matplotlib作为其绘图后端。Matplotlib是一个功能强大的绘图库,但在希望展示交互式可视化图表时,一些限制就会凸显出来。比如,Matplotlib生成的图表通常都是静态的,不能直接通过鼠标交互实现缩放、滚动、悬停、下钻等常用的交互式操作。

既然Matplotlib不支持交互式绘图,我们就需要想办法切换到另一个更为适合我们需要的绘图后端。下面我们来介绍如何使用Bokeh作为Pandas的绘图后端。

什么是Bokeh

Bokeh是一个Python编程语言下的开源工具库,主要用于大规模、高交互性、绑定的数据可视化。Bokeh可以与Jupyter notebook、Python脚本或交互式Web应用程序一起使用,支持多种图表类型,包括折线图、散点图、柱状图、表格、地理图等,也支持丰富的交互式操作和工具,如缩放、滚动、悬停、选择、标记等。

如何更改绘图后端

更改Pandas的绘图后端很简单,只需要修改pd.options.plotting.backend这个选项即可。默认情况下,该选项的值为"matplotlib",我们只需要将其改为"bokeh"即可切换到Bokeh绘图后端。

import pandas as pd
pd.options.plotting.backend = "bokeh"

在执行这行代码之后,我们就可以开始使用Bokeh绘制交互式图表。

如何使用Bokeh绘制交互式图表

接下来,我们来演示如何使用Bokeh绘制交互式图表。

以地理图为例,首先需要安装bokehGeoPandas库(如未安装可通过以下方式安装,国内用户可使用清华PyPI源进行加速):

pip install bokeh geopandas -i https://pypi.tuna.tsinghua.edu.cn/simple/

然后,可以下载一个包含美国各洲面状地理数据的GeoJSON文件us-states.json,并通过GeoPandas库读取数据:

import geopandas as gpd
url = "https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json"
us_map = gpd.read_file(url)

读取完成后,我们可以使用Pandas提供的plot函数将地理数据绘制到Bokeh图表中。

us_map.plot()

执行该代码片段后,即可在Jupyter notebook中看到一个交互式的地理图表,包含了缩放、滚动、悬停、下钻等常用交互式操作。

针对Matplotlib与Bokeh的对比

最后,我们对比一下使用Matplotlib和Bokeh绘制折线图和散点图的区别。

import numpy as np
import pandas as pd
import matplotlib.pyplot# Pandas更改绘图后端以获得交互式绘图(续)

针对Matplotlib与Bokeh的对比

绘制折线图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 使用Matplotlib绘制折线图
pd.options.plotting.backend = "matplotlib"

np.random.seed(123)
df = pd.DataFrame(np.random.randn(10, 2), columns=['A', 'B'])
df.plot(title='Matplotlib折线图')

# 使用Bokeh绘制折线图
pd.options.plotting.backend = "bokeh"

np.random.seed(123)
df = pd.DataFrame(np.random.randn(10, 2), columns=['A', 'B'])
df.plot(title='Bokeh折线图')

对比一下Matplotlib和Bokeh绘制的折线图,我们可以发现:

  • Matplotlib绘制的折线图使用的是静态的Bitmap(比如PNG、JPEG格式)作为图像输出,只能通过切换不同的图层来实现交互式悬停操作;
  • 而Bokeh绘制的折线图使用的是动态的Javascript脚本作为图像输出,支持丰富的交互式操作和工具,如缩放、滚动、悬停、选择、标记等,效果非常生动、直观。

绘制散点图

# 使用Matplotlib绘制散点图
pd.options.plotting.backend = "matplotlib"

np.random.seed(123)
df = pd.DataFrame(np.random.randn(50, 2), columns=['A', 'B'])
df.plot(kind='scatter', x='A', y='B', title='Matplotlib散点图')

# 使用Bokeh绘制散点图
pd.options.plotting.backend = "bokeh"

np.random.seed(123)
df = pd.DataFrame(np.random.randn(50, 2), columns=['A', 'B'])
df.plot(kind='scatter', x='A', y='B', title='Bokeh散点图')

对比一下Matplotlib和Bokeh绘制的散点图,我们可以发现:

  • Matplotlib绘制的散点图同样使用的是静态的Bitmap(比如PNG、JPEG格式)作为图像输出,只能通过切换不同的图层来实现交互式悬停操作;
  • 而Bokeh绘制的散点图同样使用的是动态的Javascript脚本作为图像输出,支持丰富的交互式操作和工具,如缩放、滚动、悬停、选择、标记等,效果非常生动、直观。

总结

本文介绍了如何将Pandas绘图后端从Matplotlib更改为Bokeh,以获得交互式绘图,增强数据可视化的效果。我们简要介绍了Bokeh的基本特征和使用方法,以及使用Pandas的plot函数在Bokeh图表中绘制交互式图表的实现过程,并通过Matplotlib和Bokeh绘制折线图和散点图的对比说明Bokeh的优点所在。希望本文能够对读者在数据分析中使用交互式可视化图表有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程