不受任何已有的R,Rpy2和ggplot2知识的阻碍,我绝不会喜欢用Python创建一个普通表的散点图。
要设置它,我刚刚安装:
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
答案 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
没有任何使用经验,则可以使用python
或pandas
进行数据分析,使用numpy
进行绘图。
以下是“感觉如何”的一个小例子:
matplotlib
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