2012-03-02 8 views
3

R、Rpy2、ggplot2の既存の知識に支配されることはありませんが、Pythonから簡単なテーブルの散布図を作成することは決して少なくありません。Rpy2&ggplot2:LookupError 'print.ggplot'

R> install.packages('ggplot2')経由)
  • のUbuntu 11.10 64ビット
  • R version 2.14.2(R-CRANミラーから)
  • ggplot2
  • rpy2-2.2.5を(easy_installて:私はちょうどインストールしたこれを設定するには

これに続いて私はggplot2を使ってインタラクティブなRセッションからいくつかのサンプルデータフレームをプロットする。

しかし、私は単に私がオンラインで見つけるの例で見てきたようggplot2をインポートしようとすると、I取得するには、次のエラー:

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 

誰もが私が間違っているのを教えすることはできますか?私が言いましたように、違反のインポートはオンラインの例に由来しているので、gplot2からrpy2を使用する必要がある他の方法があるかもしれません。

参考

、上記の問題とは関係のない、ここで私はインポートが(例を見て問題になることはありません)仕事を得ると、プロットしたいデータフレームの一例です。アイデアは、x軸上の長さ、Y軸上のパーセンテージ、およびブール値を使ってドットを着色する散布図を作成し、ファイル(画像またはpdfのいずれか)に保存したい場合に使用します。これらの要件が非常に限られていることを考えると、代替ソリューションも同様に歓迎されます。 lattice with rpy2:私はあなたが見ているインポートエラーの修正のお手伝いをすることはできませんが

 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 

答えて

4

rpy2層を壊したgパッケージのggplot2に変更がありました。 bitbucketのrpy2コードの "default"ブランチ(rpy2-2.3.0-dev)の最近の(これを修正したばかりです)スナップショットを試してみてください。

編集: rpy2-2.3.0は2カ月遅れる予定です。私は問題を解決するべきバグ修正リリースrpy2-2.2.6をプッシュしました。あなたはRではなくpythonの経験を持っていない場合

+0

こんにちは、問題を解決していただきありがとうございます!インポートが再び機能し、私はコードをrpy2 + ggplot2を使うように変換しようとしています。 – Tim

2

、ここで格子を使用して同様の例があります。また、標準R plot機能は、あなたがrow.retained列を養うことができfactor機能を(使用して着色を受け入れ

例:。フシトールの回答に基づいて

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

私が代わりに両方を使用してプロットを実装しましたデフォルトのプロット&格子ここで両方の実装です:。

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) 

それは、NICを生産するようそれは、私がggplot2を動作させることはできません残念です私はデータフレームに関する作業をより明示的なものとして扱います。その方向への助けはまだ歓迎です!

1

この問題は、最新のggplot2バージョン0.9.0が原因です。このバージョンには、ggplot2バージョン0.8.9にあるprint.ggplot()関数はありません。

最新のggplot2で動作するようにrpy2コードを修正しようとしましたが、変更の延長がかなり大きいようです。

一方、ggplot2のバージョンを0.8にダウングレードするだけです。9

+0

'ggplot2 ::: print.ggplot' – baptiste

2

、あなたはプロットのため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') 

alternative.png

pandasも実験的rpy2インタフェースを持っています。