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绘制交互式图表。
以地理图为例,首先需要安装bokeh
和GeoPandas
库(如未安装可通过以下方式安装,国内用户可使用清华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的优点所在。希望本文能够对读者在数据分析中使用交互式可视化图表有所帮助。