1

Rpy2を使用してggplot2でデータフレームをプロットしています。私は次のプロットを作成します。

p = ggplot2.ggplot(iris) + \
    ggplot2.geom_point(ggplot2.aes_string(x="Sepal.Length", y="Sepal.Width")) + \
    ggplot2.facet_wrap(Formula("~Species"))
p.plot()
r["dev.off"]()  

各サブプロットに、プロットに関するいくつかの統計を注釈として付けたいと思います。たとえば、各x / yサブプロット間の相関を計算し、それをプロットの右上隅に配置したいと思います。これはどのように行うことができますか?理想的には、データフレームをRからPythonオブジェクトに変換し、相関を計算してから、それらをスキャッターに投影したいと思います。次の変換は機能しませんが、これが私がやろうとしている方法です。

# This does not work 
#iris_df = pandas.DataFrame({"Sepal.Length": rpy2.robjects.default_ri2py(iris.rx("Sepal.Length")),
#                            "Sepal.Width": rpy2.robjects.default_ri2py(iris.rx("Sepal.Width")),
#                            "Species": rpy2.robjects.default_ri2py(iris.rx("Species"))})
# So we access iris using R to compute the correlation
x = iris_py.rx("Sepal.Length")
y = iris_py.rx("Sepal.Width")
# compute r.cor(x, y) and divide up by Species
# Assume we get a vector of length Species saying what the
# correlation is for each Species' Petal Length/Width
p = ggplot2.ggplot(iris) + \
    ggplot2.geom_point(ggplot2.aes_string(x="Sepal.Length", y="Sepal.Width")) + \
    ggplot2.facet_wrap(Formula("~Species")) + \
    # ...
    # How to project correlation?
p.plot()
r["dev.off"]()    

しかし、PythonからRデータフレームに実際にアクセスできると仮定すると、これらの相関関係をどのようにプロットできますか?ありがとう。

4

2 に答える 2

1

解決策は、プロットされた各サンプルのラベルを使用してデータフレームを作成することです。データフレームの列は、データフレームの対応する列名と元のデータと一致する必要があります。次に、これを次のようにプロットできます。

p += ggplot2.geom_text(data=labels_df, mapping=ggplot2.aes_string(x="1", y="1", mapping="labels"))

ここlabels_dfで、はラベルを含むデータフレームであり、labelsはプロットされるラベルの列名ですlabels_df(1,1)この場合、各サブプロットのラベルの座標位置になります。

于 2013-02-18T04:40:37.067 に答える
0

@user248237dfsfの答えがうまくいかなかったことがわかりました。ggplotは、プロットしていたデータフレームとラベルに使用していたデータフレームの間で混乱しました。

代わりに、ggplot2_env =robjects.baseenv'as.environment'を使用しました

class GBaseObject(robjects.RObject):
  @classmethod
  def new(*args, **kwargs):
    args_list = list(args)
    cls = args_list.pop(0)
    res = cls(cls._constructor(*args_list, **kwargs))
    return res

class Annotate(GBaseObject):
  _constructor = ggplot2_env['annotate']
annotate = Annotate.new

これで、標準の注釈と同じように機能するものができました。

annotate(geom = "text", x = 1, y = 1, label = "MPC")

マイナーなコメント:これがファセットで機能するかどうかはわかりません。

于 2016-06-28T19:51:48.290 に答える