在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实现生成用户信息
Mar 20 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
python基础学习之如何对元组各个元素进行命名详解
Jul 12 Python
Django 实现购物车功能的示例代码
Oct 08 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
python多任务之协程的使用详解
Aug 26 Python
python 3.8.3 安装配置图文教程
May 21 Python
深入理解python多线程编程
Apr 18 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 Python
教你使用TensorFlow2识别验证码
Jun 11 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操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
js使用递归解析xml
2014/12/12 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
有机童装:Toby Tiger
2018/05/23 全球购物
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
SQL Server面试题
2016/10/17 面试题
Linux内核产生并发的原因
2012/07/13 面试题
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
幼儿园辞职信
2015/05/13 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
2019军训心得体会
2019/06/27 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python