3

重複の可能性:
ggplot2棒グラフの注文バー

データセットがあり、変数の 1 つの割合を示す ggplot 棒グラフを作成し、別の変数に基づいて棒を並べ替えたり並べ替えたりしたいと考えています。以下はデータセットの例です。

grouping,category,domain
6,W,ced0.11
1,none,ced1.1
2,none,ced1.1
3,Z,ced1.5
2,Z,ced1.7
3,Z,ced1.3
3,none,ced1.6
2,none,ced1.1
1,Z,ced1.1
4,none,ced0.8
4,W,ced0.6
4,W,ced0.6
2,Z,ced1.5
2,W,ced1.6
4,Y,ced0.16
3,Z,ced1.5
4,Y,ced0.15
4,W,ced0.15
4,Y,ced0.24
6,W,ced0.8
4,Y,ced0.4
4,none,ced0.19
4,W,ced0.5
4,W,ced0.10
4,W,ced0.9
4,W,ced0.3
1,Z,ced1.6
4,W,ced0.9
4,W,ced0.15
1,Z,ced1.1
4,Y,ced0.19
6,W,ced0.4
4,W,ced0.16
4,W,ced0.6
4,W,ced0.5
2,Z,ced1.7
4,W,ced0.9
4,Y,ced0.1
4,W,ced0.2
4,Y,ced0.21
2,W,ced0.3
4,Y,ced0.21
4,W,ced0.10
1,Z,ced1.2
4,Y,ced0.16
1,Z,ced1.2
1,Z,ced1.2
5,W,ced0.23
4,Y,ced0.1

棒グラフをインポートして表示するための以下のコード。

library(ggplot2)
ex1.dta <- read.csv("../../Datasets/ex1.txt",sep=",",header=TRUE)

#sort the data frame
ex1.dta2 <- transform(ex1.dta,domain=reorder(domain,category))

ggplot(ex1.dta2,aes(domain,fill=category)) +
  geom_bar(position="fill") + 
  scale_y_continuous(name="Proportion") + 
  scale_x_discrete(name="domains") +
  scale_fill_manual(values=c("#841108","#16a4e9","#a4a42a","#eb96ed","grey"),name="category") + 
  theme_bw() +
  opts(
    axis.text.x=theme_text(angle=-90,hjust=0),
    axis.line = theme_segment(colour = "black"),
    panel.grid.major = theme_blank(),
    panel.grid.minor = theme_blank(),
    panel.border = theme_blank()) +
  geom_vline(xintercept = 0)

ここに画像の説明を入力

変換を使用してデータ フレームを並べ替えると、警告が表示され、並べ替えや並べ替えが実行されません。私が本当に望むのは、各カテゴリのバーが x 軸に沿ってグループ化されるように (そして降順で) 並べ替えることです。(すべての茶色のバーが一緒に、水色のバーが一緒に、「階層的な方法」で、など。)

どうすればそれを達成できますか?複数注文する必要はありますか?何か案が?

4

1 に答える 1

1

実際にどのような順序が必要かは完全にはわかりませんが、次のようにしてみてください。

ex1.dta2 <- transform(ex1.dta,domain=reorder(domain,category,FUN = function(x){ min(as.numeric(x)) }))

結果は のレベルがどのようにcategory配置されているかに依存するため、これが正確な順序でない場合は調整する必要があります。この場合、次のグラフが得られます。

ここに画像の説明を入力

ここで何が起こっているかというと、因子は整数コードと一連のラベルとして内部的に保存されています。したがって、係数に基づいて並べ替えるにはcategory、整数コードに変換してから最小値を選択する無名関数を渡すだけです。

于 2012-09-16T20:48:58.313 に答える