【发布时间】:2011-03-31 17:24:40
【问题描述】:
我正在使用 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: Error: 当设置 美学时,它们可能只取一个值。问题:填充,x
【问题讨论】:
-
你能在 R 中创建 ggplot2 图,而不需要周围的所有 python 杂物吗?从 R 代码开始可能会更容易,然后尝试将其转换为 RPy2。将 R 封装在 RPy2 调用中会产生一个额外的调试层。
-
使用
ggsave或png()+dev.off()。您可能还需要明确地print()该情节。 -
或者只是重写R中的Python部分;-)
-
感谢您的建议,我会试一试。哈哈,现在我正在这样做-> 将内容直接移植到 R 进行分析。不幸的是,我“需要”python,因为这是我正在使用 pylons 开发的网络应用程序。我可能会做的是摆脱大部分 python 并直接从 r 中提取我的 mssql rdms 中的数据。
-
它可能会帮助您正确设置 ggplot2 代码(看起来主要是您的问题)。
标签: python r device ggplot2 rpy2