在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检测远程服务器tcp端口的方法
Mar 14 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 Python
Python简单读取json文件功能示例
Nov 30 Python
Python之reload流程实例代码解析
Jan 29 Python
python绘制立方体的方法
Jul 02 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
python文件路径操作方法总结
Dec 21 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
PHP的栏目导航程序
2006/10/09 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
python批量导出导入MySQL用户的方法
2013/11/15 Python
Python爬取读者并制作成PDF
2015/03/10 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
学生检讨书怎么写
2015/05/07 职场文书
新学期家长寄语2016
2015/12/03 职场文书
优质护理服务心得体会
2016/01/22 职场文书
Python语言中的数据类型-序列
2022/02/24 Python