在Python中使用R与Rpy2:如何ggplot2?

Rev*_*evo 2 r ggplot2 rpy2 python-2.7

大家好我想在Python中使用R,我发现Rpy2非常有趣.它功能强大而且使用起来并不困难,但即使我阅读了文档并查找了类似的问题,我也无法解决ggplot2库的问题.

基本上我有一个包含2列,11行且没有标题的数据集,我想使用Python中的这个R代码做散点图:

ggplot(dataset,aes(dataset$V1, dataset$V2))+geom_point()+scale_color_gradient(low="yellow",high="red")+geom_smooth(method='auto')+labs(title = "Features distribution on Scaffolds", x='Scaffolds Length', y='Number of Features')
Run Code Online (Sandbox Code Playgroud)

我已经在R中测试了这个代码(在read.table我的文件之后)并且它可以工作.现在,这是我的python脚本:

import math, datetime
import rpy2
import rpy2.robjects as robjects
import rpy2.robjects.lib.ggplot2 as ggplot2

r = robjects.r
df = r("read.table('file_name.txt',sep='\t', header=F)")
gp = ggplot2.ggplot(df, ggplot2.aes(df[0], df[1])) + ggplot2.geom_point() + ggplot2.scale_color_gradient(low="yellow",high="red") + ggplot2.geom_smooth(method='auto') + ggplot2.labs(title = "Features distribution on Scaffolds", x='Scaffolds Length', y='Number of Features')
gp.plot()
Run Code Online (Sandbox Code Playgroud)

如果我运行这个Python代码,它会给我两个错误.首先是:

gp = ggplot2.ggplot(df, ggplot2.aes(df[0], df[1]))
TypeError: new() takes exactly 1 argument (3 given)
Run Code Online (Sandbox Code Playgroud)

第二个是:

AttributeError: 'module' object has no attribute 'scale_color_gradient'
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解我错在哪里吗?

非常感谢您的宝贵时间!

的Massimiliano.

unu*_*tbu 10

也许您需要将数据框列与散点的颜色scale_colour_gradient相关联,以便可以将该列与该列相关联:

import numpy as np
import pandas as pd
import rpy2.robjects.packages as packages
import rpy2.robjects.lib.ggplot2 as ggplot2
import rpy2.robjects as ro
R = ro.r
datasets = packages.importr('datasets')
mtcars = packages.data(datasets).fetch('mtcars')['mtcars']
gp = ggplot2.ggplot(mtcars)
pp = (gp 
      + ggplot2.aes_string(x='wt', y='mpg')
      + ggplot2.geom_point(ggplot2.aes_string(colour='qsec'))
      + ggplot2.scale_colour_gradient(low="yellow", high="red") 
      + ggplot2.geom_smooth(method='auto') 
      + ggplot2.labs(title="mtcars", x='wt', y='mpg'))

pp.plot()
R("dev.copy(png,'/tmp/out.png')")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


错误

gp = ggplot2.ggplot(df, ggplot2.aes(df[0], df[1]))
TypeError: new() takes exactly 1 argument (3 given)
Run Code Online (Sandbox Code Playgroud)

发生因为ggplot2.ggplot只有1个参数,数据帧:

gp = ggplot2.ggplot(df)
Run Code Online (Sandbox Code Playgroud)

然后,您可以将美学映射添加到gp:

gp + ggplot2.aes_string(x='0', y='1')
Run Code Online (Sandbox Code Playgroud)

where '0''1'是列的名称df.根据文档中示例,我在aes_string这里使用而不是aes.


第二个错误

AttributeError: 'module' object has no attribute 'scale_color_gradient'
Run Code Online (Sandbox Code Playgroud)

之所以发生是因为ggplot2使用英国拼写的颜色scale_colour_gradient: