点击上方“Deephub Imba”,关注公众号,好文章不错过 !
交互式图表受到所有人的喜爱,因为它们能够更有效地讲述故事。在数据科学和相关领域也是如此。探索性数据分析是数据预处理管道中的一个重要步骤,在生态系统中有许多可用的库来实现这一点。下图完美地概括了这一观点。
尽管有这么多的选择,被誉为python可视化包鼻祖的Matplotlib仍然是许多人的最爱。但是缺乏互动性是它最大的瓶颈,但是有些大佬已经设计了一些变通方案,通过一些第三方库增加交互的功能。matplotlib可以更改使用的后端的创建来交互式图,本文将研究两个这样的后端,以及它们如何使matplotlib在Jupyter 中呈现交互性。
Matplotlib后端
Matplotlib设计的精妙之处就在于可以支持不同的后端完成不同的功能。首先我们定义:
“前端”是面向用户的代码,即绘图代码,而“后端”则完成所有幕后的工作,例如数据获取,计算等以制作图形。
这意味着交互的先决条件是拥有一个交互式后端。在Jupyter notebook的默认后端是由%matplotlib inline启用的内联后端。它在渲染静态图像方面很出色,但不提供诸如平移、缩放或从其他单元格自动更新数字等交互式功能。
当启用其他后端时就可以实现交互式图像操作。本文将介绍两个常见的方法,可以在数据可视化任务中使用它们。
nbagg后端
backend_nbagg可以在notebook上呈现交互式图形。它利用了为webagg作为开发的基础。
要在Jupyter中输入以下命令启用后端,
%matplotlib notebook
下面是一个基本的例子来展示nbagg后端的用法。
# The code is to be run in a Jupyter Notebook
import matplotlib.pyplot as plt
%matplotlib notebook
plt.plot([1,2,3,4,5,6,7], [10, 50, 100, 23,15,28,45], linewidth = 3, c = 'g')
也可以从其他单元格自动更新图形。例如,折线图可以通过下图中后续单元格中执行的代码进行更新。
通过右上角提供的蓝色按钮🔵,可以轻松关闭该功能。当单击时,交互将停止,并在下一个单元格中生成一个新图。就是这么简单。
这种交互性不仅局限于2D图形,3D图形中也是可以的。代码取自matplotlib的官方文档。
# The code is to be run in a Jupyter Notebook or Jupyter Lab
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
%matplotlib notebook
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Grab some test data.
X, Y, Z = axes3d.get_test_data(0.05)
# Plot a surface plot.
ax.plot_surface(X, Y, Z, rstride=10, cstride=10, )plt.show()
这种方式可能工作得很好但它与Jupyter Lab不兼容,所以它对Jupyter Lab用户没有多大用处。此外保存选项似乎对我不起作用。下面我们介绍另外一个后端,这将是可以实现相同的结果的一个更好的替代方案。
Ipyml后端
ipyml后端在“经典的”notebook 以及Jupyter lab都可以完美的运行。ipyml后端使用ipywidget框架,需要单独安装。ipywidget用于在Jupyter 环境中构建交互式gui。在滑块、文本框等控件的帮助下,用户可以与他们的可视化效果进行无缝交互。
Ipympl可以通过pip或conda很容易地安装。
pip install ipympl
conda install -c conda-forge ipympl
对于Jupyter Lab用户,node js和jupyterLab扩展管理器也是必需的。为了获得更好的体验,建议使用JupyterLab >= 3。
conda install -c conda-forge nodejs
jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib
使用以下命令来激活ipyml后端:
%matplotlib widget
我们将使用与上一节相同的示例。这也将帮助我们比较这两种功能。
# The code is to be run in a Jupyter Notebook or Jupyter Lab
import matplotlib.pyplot as plt
%matplotlib widget
plt.plot([1,2,3,4,5,6,7], [10, 50, 100, 23,15,28,45])
ipyml后端也可以用于3D可视化。
控制功能位于图的右侧,除此之外它与上一节中获得的图非常相似。但有一些细微的差别:
可以保存为静态图像
可以根据UI调整plot大小
这是我在大多数其他可视化库中都没有看到的一个很棒的特性。
ipyml后端的另外一个好处是支持matplotlib和所有构建在matplotlib之上的库(如Pandas、Geopandas、Seaborn等)。
总结
下面是对本文内容的总结。我们了解了matplotlib的一些后端。nbagg和ipyml似乎都工作得很好,但ipyml有更好的附加功能。我相信您会喜欢试验这些后端,并亲自看看它们的交互特性。
作者:Parul Pandey
喜欢就关注一下吧:
点个 在看 你最好看!********** **********