Rpy2 を使用して Python で R データフレーム オブジェクトを作成すると、次のようになります。
cat name num
1 a bob 1
2 b bob 2
3 a mary 3
4 b mary 4
反転した座標としてプロットし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' が 2 番目に緑) を持つグラフが得られますが、'名前'。前回からの感想。投稿は、これが順序をcoord_flip()
反転するためであるということです。現在の凡例と一致するように棒の順序(凡例の順序ではなく)を変更し、覆い隠された各棒グループの最初に赤い棒をプロットするにはどうすればよいですか? ありがとう。
編集:*
rpy2で@joranのソリューションを試しました:
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]
これについての考え?