在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使用wxPython打开并播放wav文件的方法
Apr 24 Python
Python 转义字符详细介绍
Mar 21 Python
基于python中的TCP及UDP(详解)
Nov 06 Python
TensorFlow实现简单卷积神经网络
May 24 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
vscode 配置 python3开发环境的方法
Sep 19 Python
keras模型保存为tensorflow的二进制模型方式
May 25 Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 Python
Python数据模型与Python对象模型的相关总结
Jan 26 Python
详解Django中 render() 函数的使用方法
Apr 22 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下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
Python ZipFile模块详解
2013/11/01 Python
python正则表达式的使用
2017/06/12 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
澳大利亚百货公司:David Jones
2018/02/08 全球购物
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
文科毕业生自荐书范文
2014/04/17 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
银行自荐信范文
2015/03/25 职场文书
婚宴来宾致辞
2015/07/28 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
总结一些Java常用的加密算法
2021/06/11 Java/Android
MySQL分区表管理命令汇总
2022/03/21 MySQL