python画饼图_python数据可视化系列---谁是ggplot2的更好python实现

大概在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

(2)关于开源协议:

虽然plotnine的作者说会一直开发该包,但还是有人从plotnine使用的开源协议看出来一些端倪,并追问作者从ggplot2复制了算法/代码,还是只是从API复制了?如果仅是后者,则API是否受版权保护是一个不断争议的问题。

  • ggplot2 采用的是GPL-2协议
  • ggpy采用的BSD 2协议发布的,该协议比plotnine的GPLv2协议更宽松

首先,让我们来聊聊不同开源协议的区别:

e56bd8c4ef41ff43b95e5ab1409861c2.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)可视化的意义何在,如何做到相同的数据,更好的可视化,更好的讲故事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值