大概在4年前我就了解到了,在python中也有一个类似R 语言ggplot2实现的模块,叫做ggpy,即ggplot for python。当时没有实际使用ggpy,如今使用plotnine,就好奇为什么会有两个功能如此雷同的模块被开发出来呢?如果不是重复造轮子,那哪个更好呢?于是乎,有了这篇文章。
首先,来到plotnine的官网,关于plotnine的历史和开发目的,他是这么说的:
开始使用plotnine是为了改善ggpy的scalling功能。但估计修修补补解决不了问题,所以另起炉灶,于是乎有了plotnine,大概就是这么个经过。
并且plotnine是建立在python生态上的:
- matplotlib - Plotting backend.
- pandas - Data handling.
- mizani - Scales framework.
- statsmodels - For various statistical computations.
- scipy - For various statistical computation procedures.
由此,似乎说明ggpy不够好,所以有了plotnine啊。可是这毕竟是plotnine作者自己的说辞,可能并不客观。还有,也没回答具体哪些方面plotnine比ggpy更好啊,从一个使用者的角度,这个很重要!!!
于是找到github上相关的issues: link1, link2,基本上解答了我的问题,总结来有以下几个方面:
ggplot / ggpy:
- 自2016年起停止开发(Latest commit b6d23c2 on Nov 20, 2016)
- 无法完全表示R ggplot2库:ggpy只是与Matplotlib语法类似的语法,因此,用户获得了绘图语法申明清晰,而灵活性却丧失了。例如,受限于geoms和 stats的不可组合,缺乏与适当缩放后端(backend)的集成。
plotnine软件包:
- plotnine包目前仍在积极开发中(Latest commit9a324be5 days ago)。
- 使用非常相似的语法(R用户的一致性),提供了原始R ggplot2软件包的更完整的Python实现。因此,语法也类似于ggpy包。
- Plotnine构建在matplotlib之上,因此,可plotnine的高级功能入手,并在需要时可以使用matplotlib函数进一步自定义由plotnine创建的fig/ax对象。
- 该项目的中长期前景在很大程度上取决于科学的python生态系统。最主要是取决于Matplotlib的发展,scipy软件包有一些影响
为plotnine做了这么多宣传,那么其有没有不足呢?答案是肯定的。
(1)关于内存:
之前在使用R ggplot2进行可视化时,就出现过内存的问题,那么plotnine是否存在某些特定的内存优化呢?
对于这个问题,plotnine作者has2k1的回答是:
如果在使用R ggplot2时遇到内存问题,那么使用plotnine也会遇到。因为plotnine也会对dataframes进行复制。当Pandas实libpandas(并获得copy-on-write)当前预计在2.0版左右时,应该会减轻这种情况。
这就有点画饼的味道了,目前pandas最新版才1.0.3呢
![444b95a998bb9effe917a112a6bf2aa6.png](https://i-blog.csdnimg.cn/blog_migrate/ccdf318d41e4149dcca493faf4e50d35.png)
(2)关于开源协议:
虽然plotnine的作者说会一直开发该包,但还是有人从plotnine使用的开源协议看出来一些端倪,并追问作者从ggplot2复制了算法/代码,还是只是从API复制了?如果仅是后者,则API是否受版权保护是一个不断争议的问题。
- ggplot2 采用的是GPL-2协议
- ggpy采用的BSD 2协议发布的,该协议比plotnine的GPLv2协议更宽松
首先,让我们来聊聊不同开源协议的区别:
![e56bd8c4ef41ff43b95e5ab1409861c2.png](https://i-blog.csdnimg.cn/blog_migrate/d6f0685b75690e81e456de00a6453148.png)
(图片来源:百度百科link)
由于ggplot2从R源中获取了一些代码片段,而plotnine是ggplot2的衍生软件,因此GPLv2许可证通过R-> ggplot2-> plotnine传递。关于使用ggplot2代码还是API, plotnine作者的回答是:The data transformation pipeline that facilitates "grammar" is copied from ggplot2。
综上所述:虽然plotnine还处在开发阶段,但依然感谢作者在努力的维护中,因此,选择plotnine目前还是个不错的选择的,尤其是对于静态图而言,对于动态图,当然是plotly啦~
最后,留下三个坑,带后面继续慢慢填:
(1)前文提到的可缩放后端backend, 进一步的比较不同后端及使用场合的比较
(2)对于交互式作图,plotly的学习,以及利用其重点关注统计作图
(3)可视化的意义何在,如何做到相同的数据,更好的可视化,更好的讲故事。