我在尝试将 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
与通常的情况一样,我在这里遗漏了一些简单的东西。任何有关适当文档的帮助或指导将不胜感激。
谢谢。
最佳答案
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)
关于python - 通过 rpy2 将符号值的 Python 列表传递给 R Legend 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13752473/