在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中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
Python环境变量设置方法
Aug 28 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
Python快速查找list中相同部分的方法
Jun 27 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
一行Python代码过滤标点符号等特殊字符
Aug 12 Python
python 实现矩阵按对角线打印
Nov 29 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 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/03 咖啡文化
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
python 生成器协程运算实例
2017/09/04 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
python字符串常用方法
2018/06/14 Python
Python实现Event回调机制的方法
2019/02/13 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
详解python中各种文件打开模式
2020/01/19 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
.NET面试10题
2014/02/24 面试题
如何写一个自定义标签
2012/12/28 面试题
中学生个人自我评价
2014/02/06 职场文书
2014年清明节寄语
2014/04/03 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL