python - ggplot2 hell 与 rpy2-2.0.7 + python 2.6 + r 2.11 (windows 7)

标签 python r device ggplot2 rpy2

我正在使用 rpy2-2.0.7(我需要它与 Windows 7 一起使用,并且为较新的 rpy2 版本编译二进制文件是一团糟)将两列数据帧插入 r,在 ggplot2 中创建几个层, 并将图像输出到 <.png> 中。

我已经浪费了无数个小时来研究语法;我确实设法在某一时刻输出了我需要的文件,但是(愚蠢地)没有注意到并继续摆弄我的代码......

如果有任何帮助,我将不胜感激;下面是一个(简单的)演示示例。非常感谢您的帮助!!! ~ 埃里克黄油


import rpy2.robjects as rob
from rpy2.robjects import r
import rpy2.rlike.container as rlc
from array import array

r.library("grDevices")    # import r graphics package with rpy2
r.library("lattice")
r.library("ggplot2")
r.library("reshape")

picpath = 'foo.png' 

d1 = ["cat","dog","mouse"]
d2 = array('f',[1.0,2.0,3.0])

nums = rob.RVector(d2)
name = rob.StrVector(d1)

tl = rlc.TaggedList([nums, name], tags = ('nums', 'name'))
dataf = rob.RDataFrame(tl)

## r['png'](file=picpath, width=300, height=300)
## r['ggplot'](data=dataf)+r['aes_string'](x='nums')+r['geom_bar'](fill='name')+r['stat_bin'](binwidth=0.1)
r['ggplot'](data=dataf)
r['aes_string'](x='nums')
r['geom_bar'](fill='name')
r['stat_bin'](binwidth=0.1)
r['ggsave']()
## r['dev.off']()

*输出只是一张空白图像 (181 b)。


这是我在 ggplot2 中摆弄时 R 本身抛出的几个常见错误:

r['png'](file=picpath, width=300, height=300)
r['ggplot']()
r['layer'](dataf, x=nums, fill=name, geom="bar")
r['geom_histogram']()
r['stat_bin'](binwidth=0.1)
r['ggsave'](file=picpath)
r['dev.off']()

*RRuntimeError: 错误:绘图中没有图层

r['png'](file=picpath, width=300, height=300)
r['ggplot'](data=dataf)
r['aes'](geom="bar")
r['geom_bar'](x=nums, fill=name)
r['stat_bin'](binwidth=0.1)
r['ggsave'](file=picpath)
r['dev.off']()

*RRuntimeError: 错误:当设置 美学时,它们可能只取一个值。问题:填充,x

最佳答案

我仅通过 Nathaniel Smith 出色的小模块 rnumpy 使用 rpy2 (请参阅 rnumpy 主页上的“API”链接)。有了它,您可以:

from rnumpy import *

r.library("ggplot2")

picpath = 'foo.png' 
name = ["cat","dog","mouse"]
nums = [1.0,2.0,3.0]

r["dataf"] = r.data_frame(name=name, nums=nums)
r("p <- ggplot(dataf, aes(name, nums, fill=name)) + geom_bar(stat='identity')")
r.ggsave(picpath)

(我有点猜测你希望情节看起来如何,但你明白了。)

另一个非常方便的方法是使用 ipy_rnumpy 模块从 Python 进入“R 模式”。 (请参阅 rnumpy 主页上的“IPython 集成”链接)。

对于复杂的东西,我通常会在 R 中制作原型(prototype),直到我制定出绘图命令为止。 rpy2 或 rnumpy 中的错误报告可能会变得非常困惑。

例如,赋值(或其他计算)的结果有时会打印出来,即使它应该是不可见的。这很烦人,例如分配给大数据帧时。一个快速的解决方法是用一个评估结果很短的尾随语句结束有问题的行。例如:

In [59] R> long <- 1:20
Out[59] R>
  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
 [19]  19  20

In [60] R> long <- 1:100; 0
Out[60] R> [1] 0

(为了消除 rnumpy 中一些反复出现的警告,我编辑了 rnumpy.py 以添加“from warnings import warn”并将“print”error in process_revents: ignored“”替换为“warn(”error in process_revents: ignored” )'。这样一来,每个 session 我只会看到一次警告。)

关于python - ggplot2 hell 与 rpy2-2.0.7 + python 2.6 + r 2.11 (windows 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3515269/

相关文章:

android - 如何获取设备中存储的用户自己的电子邮件地址?

python - 无需包的快速矩阵求逆

r - 如何在数据集上使用 RWeka 包?

R - describe() 输出到数据框

r - 在 R 中使用随机森林预测的不同结果

c++ - 如何使用 C++ 更改 Window 的事件记录设备?

python concurrent.futures 线程与进程问题

python - 复合索引 SQLModel

python - 在python中解析文件并修改字符串

安卓 : Launch test on device FROM device/application