1

rpy2を使用してプロットのR凡例呼び出しにPythonリストを渡そうとすると問題が発生します。次のように、既存の辞書からテキスト名とそれに対応する記号のリストを生成します。

    dataDict = {'data':{...},
                'symbols':{'xylem':14,'groundwater':17,'lagoon':16,'stream':15}}
    nameListForLegend = [name for name in dataDict["symbols"]]
    symbolListForLegend = [dataDict['symbols'][category] \
                           for category in dataDict['symbols']]

nameListForLegend 変数は呼び出しで機能しますが、symbolListForLegend は機能しません。

    r.legend(1.5, -42, nameListForLegend,
             pch = symbolListForLegend,cex=3,col="black",border = 0)

次のようなハッキーなソリューションを使用して、R オブジェクトとして渡そうとしました。

    #after converting each list element to a string
    symbolListString = ",".join(symbolListForLegend)
    symbolListForLegend = robjects.r('list('+symbolListString+')')

すべてのリターン:

    RRuntimeError: Error in plot.xy(xy.coords(x, y), type = type, ...) :invalid plotting symbol

よくあることですが、ここでは単純なものが欠けています。適切なドキュメントへのヘルプまたは指示をいただければ幸いです。

ありがとうございました。

4

1 に答える 1

1

symbolListForLegendは Python リストであり、R オブジェクトへの直接変換はありません (ただし、デフォルトの名前の要素を持つ R リストである可能性があります)。R 関数はベクトルを期待しています。

試す:

from rpy2.robjects.vectors import IntVector
symbolListForLegend = [dataDict['symbols'][category] \
                       for category in dataDict['symbols']
symbolVectorForLegend = IntVector(symbolListForLegend)
r.legend(1.5, -42, nameListForLegend,
         pch = symbolVectorForLegend, cex=3, col="black", border = 0)
于 2012-12-07T08:29:24.067 に答える