1

我在尝试将 Python 列表传递给 R 图例调用以使用 rpy2 进行绘图时遇到问题。我从现有字典中生成文本名称及其对应符号的列表,如下所示:

    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 对象传递,并使用 hacky 解决方案,例如:

    #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 回答