在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实现网页链接提取的方法分享
Feb 25 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
python编写Logistic逻辑回归
Dec 30 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 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
php中函数的形参与实参的问题说明
2010/09/01 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
Python连接phoenix的方法示例
2017/09/29 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
django 微信网页授权登陆的实现
2019/07/30 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
毕业生幼师求职自荐信
2013/10/01 职场文书
运动会广播稿30字
2014/01/21 职场文书
办公室岗位职责
2014/02/12 职场文书
战略合作意向书范本
2014/04/01 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
在校生证明
2015/06/17 职场文书
组织委员竞选稿
2015/11/21 职场文书
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python