我想下面的代碼,但沒有成功轉化爲Rpy2變化因素秩序case Species
。在GGPLOT2與Rpy2在Python
我不想使用plyr
和所有的東西在Rpy2過,因爲我可以修改數據幀繪製成一個Python對象。以下不起作用:
# start with Python df 'mydf' and convert to R df
# to get mydf_r. The column equivalent of Species here
# is "variable"
# ...
mydf_r.variable = r.factor(ro.StrVector(["a", "b", "c"]))
# call ggplot...
ggplot2.ggplot(mydf) + ...
這是行不通的。我怎樣才能獲得R代碼的等價物?即我有一個的variable
繪製c, b, a
幾個值的融化數據框,我想改變順序改變factor
秩序variable
是a, b, c
。謝謝。
編輯我能夠使用此代碼更改順序:
labels = robj.StrVector(tuple(["a", "b", "c"]))
variable_factor = r.factor(labels, levels=labels)
r_melted = r.transform(r_melted, **{"variable": variable_factor})
p = ggplot2.ggplot(r_melted) + \
ggplot2.geom_boxplot(aes_string(**{"x": "variable",
"y": "value"
"fill": "group"})) + \
ggplot2.scale_fill_manual(values=np.array(["#00BA38", "#F8766D"])) + \
ggplot2.coord_flip()
然而,這打破ggplot的由group
變量正確地作出箱線圖和顏色代碼它的能力。如果我刪除線:
labels = robj.StrVector(tuple(["a", "b", "c"]))
variable_factor = r.factor(labels, levels=labels)
r_melted = r.transform(r_melted, **{"variable": variable_factor})
然後一切工作正常...我要的是改變其中variable
值出現在箱線圖的順序。
@lgautier:你給的解決方案看起來像我想要的東西,但它不爲我在這裏工作。我做了一個試驗案例它與iris
數據集:
原創情節
import os
iris = pandas.read_table(os.path.expanduser("~/iris.csv"),
sep=",")
iris["Species"] = iris["Name"]
r_melted = conversion_pydataframe(iris)
p = ggplot2.ggplot(r_melted) + \
ggplot2.geom_boxplot(aes_string(**{"x": "PetalLength",
"y": "PetalWidth",
"fill": "Species"})) + \
ggplot2.facet_grid(Formula("Species ~ .")) + \
ggplot2.coord_flip()
p.plot()
生產:
但是,如果我補充一下:
labels = robj.StrVector(tuple(["versicolor", "virginica", "setosa"]))
variable_i = r_melted.names.index("Species")
r_melted[variable_i] = robj.FactorVector(r_melted[variable_i],
levels=labels)
PRI或繪圖,我得到:
我想這是因爲我使用的名稱不完全匹配的Species
名稱值。如果rpy2在發生這種情況時發生錯誤,那將會很有幫助。但無論如何,如果我想覆蓋該因素的名稱怎麼辦?即採取的第一個因素的名稱,並使其x
,第二y
等,並將它顯示的順序?唯一的方法是在數據框中使用正確的名稱爲它創建一個新的列?
更改爲標籤水平是一個不同的問題。當因素被創建時,你可以這樣做('FactorVector(['a','b','c'],labels = StrVector(['Le A','Le B','Le C'])) '')或因子創建後('f = FactorVector(['a','b','c']); f.levels [0] ='A'') – lgautier 2013-03-09 21:22:14
您獲得一個灰色框,不對應於矢量中的任何標籤。沒有警告,因爲在這種情況下,R不會產生警告(嘗試在R中:factor(c(「a」,「b」,「c」),levels = c(「A」)))。我認爲,其邏輯是假設,如果明確指定級別,則不匹配的級別應標記爲「NA」。 ' – lgautier 2013-03-09 21:27:29