2012-12-06 37 views
1

我遇到了一個問題,它試圖將一個Python列表傳遞給使用rpy2的R圖例的R圖例調用。我生成文本名稱和其相應的符號列表從現有的字典爲:將符號值列表傳遞給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對象:

#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 

通常情況下,我在這裏錯過了一些簡單的東西。任何幫助或指導適當的文件將不勝感激。

謝謝。

回答

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) 
+0

謝謝你,lgautier。完美的作品。非常感激。 – damian

相關問題