通过rpy2向R Legend调用传递Python符号值列表

2024-05-16 20:56:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

    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不能:

^{pr2}$

我尝试过将其作为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

通常情况下,我在这里遗漏了一些简单的东西。如能提供适当的文件帮助或指导,我们将不胜感激。在

谢谢。在


Tags: namein列表fortypelistsymbolsxy
1条回答
网友
1楼 · 发布于 2024-05-16 20:56:58

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)

相关问题 更多 >