1

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]これについての考え?

4

1 に答える 1

2

申し訳ありませんが、自分のマシンに rpy のセットアップがありませんが、この R/ggplot2 コードで説明していると思われるものを取得できました。

dat$cat <- factor(dat$cat,levels = c('b','a'))

ggplot(dat,aes(x = name,y = num, fill = cat)) + 
    geom_bar(stat = "identity",position = "dodge") + 
    coord_flip() + 
    scale_fill_manual(values = c('blue','red')) +
    guides(fill = guide_legend(reverse = TRUE))

ここに画像の説明を入力

基本的に、因子レベルを逆にして、凡例の順序を逆にしただけです。複雑ですが、あなたが説明したように見えます。(また、あなたは欲しかったですstat = "identity"よね?)

于 2013-07-15T02:03:40.093 に答える