Rpy2& ggplot2:LookupError'print.ggplot'

时间:2012-03-02 21:01:35

标签: python r ggplot2 rpy2 scatter-plot

不受任何已有的R,Rpy2和ggplot2知识的阻碍,我绝不会喜欢用Python创建一个普通表的散点图。

要设置它,我刚刚安装:

  • Ubuntu 11.10 64位
  • R version 2.14.2(来自r-cran镜子)
  • ggplot2(通过R> install.packages('ggplot2')
  • rpy2-2.2.5(通过easy_install

在此之后,我能够使用ggplot2从交互式R会话中绘制一些示例数据帧。

但是,当我只是尝试导入ggplot2时,我在网上找到的示例中看到,我收到以下错误:

from rpy2.robjects.lib import ggplot2
  File ".../rpy2/robjects/lib/ggplot2.py", line 23, in <module>
    class GGPlot(robjects.RObject):
  File ".../rpy2/robjects/lib/ggplot2.py", line 26, in GGPlot
    _rprint = ggplot2_env['print.ggplot']
  File ".../rpy2/robjects/environments.py", line 14, in __getitem__
    res = super(Environment, self).__getitem__(item)
LookupError: 'print.ggplot' not found

谁能告诉我我做错了什么?正如我所说的违规导入来自一个在线示例,所以很可能我还应该通过rpy2使用gplot2。


作为参考,与上述问题无关,这里是我想绘制的数据帧的一个例子,一旦我将导入工作(看看这些例子不应该是一个问题)。我们的想法是创建一个散点图,其中x轴上的长度,Y轴上的百分比,以及布尔值用于为点着色,我想将其保存到文件(图像或pdf)。鉴于这些要求非常有限,也欢迎替代解决方案。

     original.length row.retained percentage.retained
1               1875        FALSE                11.00
2               1143        FALSE                23.00
3                960        FALSE                44.00
4               1302        FALSE                66.00
5               2016        TRUE                 87.00

5 个答案:

答案 0 :(得分:4)

R包ggplot2发生了变化,打破了rpy2层。 尝试使用bitbucket上rpy2代码的“默认”分支(rpy2-2.3.0-dev)的最近(我刚刚修复此)快照。

编辑: rpy2-2.3.0比计划落后几个月。我刚推了一个应该解决这个问题的错误修正版rpy2-2.2.6。

答案 1 :(得分:2)

虽然我无法帮助您修复您所看到的导入错误,但在此处使用晶格有一个类似的示例:lattice with rpy2

此外,标准R plot函数使用factor函数(您可以提供row.retained列来接受着色。示例:

plot(original.length, percentage.retained, type="p", col=factor(row.retained))

答案 2 :(得分:2)

根据fucitol的回答,我改为使用默认情节&amp;格子。以下是两种实现:

from rpy2 import robjects
#Convert to R objects
original_lengths = robjects.IntVector(original_lengths)
percentages_retained = robjects.FloatVector(percentages_retained)
row_retained = robjects.StrVector(row_retained)

#Plot using standard plot
r = robjects.r
r.plot(x=percentages_retained,
       y=original_lengths,
       col=row_retained,
       main='Title',
       xlab='Percentage retained',
       ylab='Original length',
       sub='subtitle',
       pch=18)

#Plot using lattice
from rpy2.robjects import Formula
from rpy2.robjects.packages import importr
lattice = importr('lattice')
formula = Formula('lengths ~ percentages')
formula.getenvironment()['lengths'] = original_lengths
formula.getenvironment()['percentages'] = percentages_retained

p = lattice.xyplot(formula,
                   col=row_retained,
                   main='Title',
                   xlab='Percentage retained',
                   ylab='Original length',
                   sub='subtitle',
                   pch=18)
rprint = robjects.globalenv.get("print")
rprint(p)

遗憾的是我无法使ggplot2工作,因为它默认生成更好的图形,我认为使用数据帧更明确。在这方面的任何帮助仍然是受欢迎的!

答案 3 :(得分:2)

如果您对[{1}}但R没有任何使用经验,则可以使用pythonpandas进行数据分析,使用numpy进行绘图。

以下是“感觉如何”的一个小例子:

matplotlib

alternative.png

import numpy as np import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({'original_length': [1875, 1143, 960, 1302, 2016], 'row_retained': [False, False, False, False, True], 'percentage_retained': [11.0, 23.0, 44.0, 66.0, 87.0]}) fig, ax = plt.subplots() ax.scatter(df.original_length, df.percentage_retained, c=np.where(df.row_retained, 'green', 'red'), s=np.random.randint(50, 500, 5) ) true_value = df[df.row_retained] ax.annotate('This one is True', xy=(true_value.original_length, true_value.percentage_retained), xytext=(0.1, 0.001), textcoords='figure fraction', arrowprops=dict(arrowstyle="->")) ax.grid() ax.set_xlabel('Original Length') ax.set_ylabel('Precentage Retained') ax.margins(0.04) plt.tight_layout() plt.savefig('alternative.png') 还有一个实验性rpy2接口。

答案 4 :(得分:1)

问题是由最新的ggplot2版本0.9.0引起的。这个版本没有print.ggplot()函数,可以在ggplot2版本0.8.9中找到。

我尝试修改rpy2代码以使其与最新的ggplot2一起使用,但更改的扩展似乎非常大。

与此同时,只需将你的ggplot2版本降级为0.8.9