3

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
4

5 に答える 5

4

Rpy2レイヤーを壊すRパッケージggplot2に変更がありました。bitbucketのrpy2コードの「デフォルト」ブランチ(rpy2-2.3.0-dev)の最近の(これを修正したばかりの)スナップショットを試してみてください。

編集: rpy2-2.3.0は予定より数ヶ月遅れています。問題に対処するバグ修正リリースrpy2-2.2.6をプッシュしました。

于 2012-04-19T16:08:43.657 に答える
2

の経験がなくてもR、データ分析やプロットにまたはをpython使用できます。numpypandasmatplotlib

以下は、「これがどのように感じられるか」の小さな例です。

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')

代替.png

pandas実験的な rpy2 インターフェイスもあります。

于 2012-04-21T09:55:49.793 に答える
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)

ggplot2デフォルトでより良いグラフが生成され、データフレームの操作はより明示的であると考えているため、仕事に就けないのは残念です。その方向での助けは大歓迎です!

于 2012-03-05T11:28:43.250 に答える
2

表示されているインポート エラーを修正することはできませんが、ここに格子を使用した同様の例があります:格子と rpy2

また、標準の Rplot関数は、関数を使用して色付けを受け入れfactorます (列にフィードできrow.retainedます。例:

plot(original.length, percentage.retained, type="p", col=factor(row.retained))
于 2012-03-05T10:16:09.017 に答える
1

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

rpy2コードをいじって、最新のggplot2で動作するようにしましたが、変更の範囲はかなり大きいようです。

その間、ggplot2バージョンを0.8.9にダウングレードするだけです

于 2012-04-13T11:56:00.430 に答える