python - 通过 rpy2 将符号值的 Python 列表传递给 R Legend 调用

标签 python r plot legend rpy2

我在尝试将 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/

相关文章:

python - 用全息图绘制表格数据

php - 让 Supervisord 定期重启子进程

python - 错误,“[错误] 33#33 : *92500 connect() failed (111: Connection refused) while connecting to upstream, 客户端 : 216. 58.212.244,服务器:#1906

r - r中 "! "和 "- "的区别

r 如何使用这些约束重新调整一系列数字?

python - 如何将 matplotlib 补丁定位在轴范围之外(以便它可以位于标题、图例或图形的任何位置旁边)

matlab - 以节点之间的链接绘制圆形节点网络

python - 使用 tensorflow 进行线性回归

python - Pytorch 中的填充

r - 有没有办法计算数据框每一列中 NA 的百分比,但将 df 分成不同的组?