在Python中调用ggplot的三种方法


Posted in Python onApril 08, 2015

本文提供了三种不同的方式在Python(IPython Notebook)中调用ggplot。

在大数据时代,数据可视化是一个非常热门的话题。各个BI的厂商无不在数据可视化领域里投入大量的精力。Tableau凭借其强大的数据可视化的功能成为硅谷炙手可热的上市公司。Tableau的数据可视化的产品,其理论基础其实是《The Grammar of Graphic》,该书提出了对信息可视化的图表的语法抽象体系,数据的探索和分析可以由图像的语法来驱动,而非有固定的图表类型来驱动,使得数据的探索过程变得友好而有趣。

然而对于The Grammar of Graphic的理论的实践,并非Tableau独占,ggplot作为R语言上得一个图形库,其理论基础也是这本书。(注,笔者曾就职的某BI巨头,主要职责也是数据可视化,我们曾经和加拿大团队研发过类似的产品,基于HTML5和D3,可惜由于种种原因未能推向市场)

现在越来越多的人开始使用python来做数据分析,IPython Notebook尤其令人喜爱,它的实时交互把脚本语言的优势发挥到极致。那么怎样才能在IPython Notebook中使用ggplot呢?我这里跟大家分享三种不同的方式供大家选择。
RPy2

第一种方式是使用rpy2, rpy2是对rpy的改写和重新设计,旨在提供Python用户在python中使用R的API。

rpy2提供了对R语言的对象和方法的基本封装,当然也包括可视化的图库这一块。

下面就是一段运行ggplot的R程序使用rpy2在python中运行的例子:
 

from rpy2 import robjects
from rpy2.robjects import Formula, Environment
from rpy2.robjects.vectors import IntVector, FloatVector
from rpy2.robjects.lib import grid
from rpy2.robjects.packages import importr, data
import rpy2.robjects.lib.ggplot2 as ggplot2
 
# The R 'print' function
rprint = robjects.globalenv.get("print")
stats = importr('stats')
grdevices = importr('grDevices')
base = importr('base')
datasets = importr('datasets')
 
mtcars = data(datasets).fetch('mtcars')['mtcars']
 
pp = ggplot2.ggplot(mtcars) + \
   ggplot2.aes_string(x='wt', y='mpg', col='factor(cyl)') + \
   ggplot2.geom_point() + \
   ggplot2.geom_smooth(ggplot2.aes_string(group = 'cyl'),
             method = 'lm')
pp.plot()

以上程序在IPython Notebook中运行会有缺陷,会弹出一个新的窗口显示图,而且该python进程会阻塞在那里。我们希望图表能内嵌在IPython Notebook的页面中,为了解决该问题,我们引入如下代码:
 

%matplotlib inline
 
import uuid
from rpy2.robjects.packages import importr 
from IPython.core.display import Image
 
grdevices = importr('grDevices')
def ggplot_notebook(gg, width = 800, height = 600):
  fn = '{uuid}.png'.format(uuid = uuid.uuid4())
  grdevices.png(fn, width = width, height = height)
  gg.plot()
  grdevices.dev_off()
  return Image(filename=fn)

运行上述代码后,我们把ggplot的调用pp.plot()改为调用ggplot_notebook(pp, height=300)就能成功嵌入显示ggplot的结果。

在Python中调用ggplot的三种方法

RMagic

另一种方式是使用rmagic,rmagicy实际上依赖于rpy2。它的使用方式更像是直接在使用R
 

%load_ext rmagic
library(ggplot2)
dat <- data.frame(x = rnorm(10), y = rnorm(10), 
         lab = sample(c('A', 'B'), 10, replace = TRUE))
x <- ggplot(dat, aes(x = x, y = y, color = lab)) + geom_point()
print(x)

运行结果如下

在Python中调用ggplot的三种方法

ggplot for python

ggplot是一个python的库,基本上是对R语言ggplot的功能移植到Python上。

运行安装脚本

pip install ggplot

安装成功后,可以试一下这个例子
 

%matplotlib inline
import pandas as pd
from ggplot import *
meat_lng = pd.melt(meat[['date', 'beef', 'pork', 'broilers']], id_vars='date')
ggplot(aes(x='date', y='value', colour='variable'), data=meat_lng) + \
  geom_point() + \
  stat_smooth(color='red')

结果如下:

在Python中调用ggplot的三种方法

总结

本文提供了三种不同的方式在Python(IPython Notebook)中调用ggplot。

rpy2和Rmagic都是一种对R的桥接,所以都需要安装R。不同之处在于rpy2提供Python接口而Rmagic更接近R。

ggplot Python库是ggplot的Python移植,所以无需安装R,部署起来更为简单,但功能上也许和R的ggplot还有差距。

大家可以根据自己的需要做出选择。

Python 相关文章推荐
python命令行参数sys.argv使用示例
Jan 28 Python
python基础教程之实现石头剪刀布游戏示例
Feb 11 Python
python局域网ip扫描示例分享
Apr 03 Python
Django中几种重定向方法
Apr 28 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
python入门前的第一课 python怎样入门
Mar 06 Python
Python退火算法在高次方程的应用
Jul 26 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
关于Python中定制类的比较运算实例
Dec 19 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 Python
python b站视频下载的五种版本
May 27 Python
Python字符串和文件操作常用函数分析
Apr 08 #Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 #Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 #Python
python复制与引用用法分析
Apr 08 #Python
Python导入txt数据到mysql的方法
Apr 08 #Python
python集合类型用法分析
Apr 08 #Python
在Python中使用Mako模版库的简单教程
Apr 08 #Python
You might like
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php制作文本式留言板
2015/03/18 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
一个tab标签切换效果代码
2009/03/27 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
Angular路由ui-router配置详解
2018/08/01 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
党员公开承诺事项
2014/03/25 职场文书
师德师风剖析材料
2014/09/30 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
大学生实习介绍信
2015/05/05 职场文书
校园运动会广播稿
2015/08/19 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
JS数组去重详情
2021/11/07 Javascript
Python IO文件管理的具体使用
2022/03/20 Python