使用Rpy2翻轉座標訂購GGPLOT2吧我有在Python的R數據框對象,使用Rpy2,看起來像這樣:可以用Python
cat name num
1 a bob 1
2 b bob 2
3 a mary 3
4 b mary 4
我想繪製它與翻轉COORDS一個geom_bar
,和條的順序與圖例的順序相匹配(不更改圖例)。這已經在這裏和其他郵件列表上問過了,但是我一直在關於如何將R訂購代碼翻譯成rpy2。這是我當前的代碼:
# attempting to reorder bars so that value 'a' of cat is first (in red)
# and value 'b' of cat is second (in green)
labels = tuple(["a", "b"])
labels = robj.StrVector(labels)
variable_i = r_df.names.index("cat")
r_df[variable_i] = robj.FactorVector(r_df[variable_i],
levels=labels)
r.pdf("test.pdf"))
p = ggplot2.ggplot(r_df) + \
ggplot2.geom_bar(aes_string(x="name",
y="num",
fill="cat"),
position=ggplot2.position_dodge(width=0.5)) + \
ggplot2.coord_flip()
p.plot()
這給具有正確傳說的圖形(「A」是第一紅色,「B」是第二次在綠色),但酒吧的順序顯示綠/紅( 'b','a')爲'name'的每個值。來自prev的我的印象。帖子是,這是因爲coord_flip()
翻轉訂單。如何更改酒吧訂單(不是圖例順序)以匹配當前圖例,在每個躲閃條形組中首先繪製紅色條形圖?謝謝。
編輯:*
試圖@ joran在rpy2解決方案:
labels = tuple(["a", "b"])
labels = robj.StrVector(labels[::-1])
variable_i = r_df.names.index("cat")
r_df[variable_i] = robj.FactorVector(r_df[variable_i],
levels=labels)
p = ggplot2.ggplot(r_df) + \
ggplot2.geom_bar(aes_string(x="name",
y="num",
fill="cat"),
stat="identity",
position=ggplot2.position_dodge()) + \
ggplot2.scale_fill_manual(values = np.array(['blue','red'])) + \
ggplot2.guides(fill=ggplot2.guide_legend(reverse=True)) + \
ggplot2.coord_flip()
p.plot()
這不起作用,因爲ggplot2.guides
沒有找到,但這只是設置的傳說。我的問題是:爲什麼需要scale_fill_manual
?我不想指定自己的顏色,我想要默認的ggplot2顏色,但我只想將排序設置爲特定的方式。這是有道理的,與coord_flip
我需要一個相反的順序,但這是不足以重新排列酒吧顯然(獨立於圖例我的labels[::-1]
)。對此有何想法?
ggplot2的'guides'沒有被模塊'rpy2.robjects.lib.ggplot2'自定義映射('guides'是比較近的,我錯過了它的介紹,沒有人抱怨到現在爲止)。與此同時,試着用'ggplot2.ggplot2.guides()'修改你的代碼。 – lgautier