在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跨文件全局变量的实现方法示例
Dec 10 Python
《Python学习手册》学习总结
Jan 17 Python
PyQt5每天必学之布局管理
Apr 19 Python
Pycharm设置界面全黑的方法
May 23 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
解决Django加载静态资源失败的问题
Jul 28 Python
python获取Linux发行版名称
Aug 30 Python
Python logging模块写入中文出现乱码
May 21 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
python可视化之颜色映射详解
Sep 15 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
2014最热门的24个php类库汇总
2014/12/18 PHP
10条php编程小技巧
2015/07/07 PHP
PHP实现合并discuz用户
2015/08/05 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
简明 Python 基础学习教程
2007/02/08 Python
Python continue语句用法实例
2014/03/11 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
十八届三中全会感言
2014/03/10 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python