1. ホーム
  2. r

[解決済み] ggplot2 で凡例を並べ替えるには?

2022-02-10 11:25:25

質問

ラベルのカテゴリ列とパーセントデータの量的列を持つ2列のデータフレームがある場合、以下を使用してアルファベット順ではなく値で棒グラフをソートするggplotを確実に作成することができます。

ggplot(data=df, aes(x=reorder(Label, Percent), y=Percent, fill=Label)) + geom_bar()

これは、テキストではなくパーセント値で棒グラフをソートするようにreorderに指示し、変化を見やすくするものです。

しかし、凡例を一致させることができません。代わりに、元のアルファベット順の値でソートされることに固執しています。その結果、凡例がチャートと一致しなくなり、混乱します。

StackOverflowなどで調べてみましたが、うまくいく修正方法は見つかりませんでした。何かアドバイスがあれば教えてください。

編集:リクエストに応え、本来はこのようなデータです。

Labels <- c("G", "G", "A", "C", "M", "B", "M", "G", "A","M")
Percent <- c("-0.241","-0.046", "-0.037", "-0.024", "-0.003","0.007","0.01","0.059","0.121", "0.152")

解決方法は?

最も簡単な方法は、データを並べ替えることです。 前に プロットすることができます。を指定することで reorder(() 内側 aes() の場合、基本的にプロット部分にはその順序付きコピーを作成することになりますが、内部的には ggplot を、例えば凡例作成関数に渡すことができます。

これでうまくいくはずです。

df$Label  <- with(df, reorder(Label, Percent))
ggplot(data=df, aes(x=Label, y=Percent, fill=Label)) + geom_bar()

を想定しています。 Percent カラムは数値であり、因子や文字ではありません。これはあなたの質問から明確ではありません。今後、もしあなたが dput(df) を使用すると、クラスが明確になり、データをRにコピー&ペーストできるようになります。