12

私はデータフレームを持っており、df.all以下のコードを使用してggplot2で棒グラフにプロットしています。かわしたバーの順番が反転するようにしたいと思います。つまり、「Singular」というラベルの付いたバーが「Plural」というラベルの付いたバーの前に来るようにします。

ggplot(df.all, aes(gram, V1, fill=number)) + 
    geom_bar(stat="identity", position="dodge") + 
    scale_x_discrete(labels=c("Grammatical","Ungrammatical")) +
    scale_y_continuous(formatter="percent", limits=c(0,1)) +
    facet_grid(. ~ experiment) + 
    scale_fill_hue("Attractor", breaks=c("S","P"), labels=c("Singular","Plural"))

levels(df.all$number) = c("S", "P")ggplotがレベルの順序を使用してプロットの順序を決定するのではないかと考えてみましたが、うまくいきませんでした。他に何を試すべきかわかりません。何か案は?

df.all便利な場合の内容:

> df.all
  number gram     experiment        V1
1      S    G BERIMBAU_AGR_A 0.8133333
2      S    G BERIMBAU_AGR_B 0.8658537
3      S    U BERIMBAU_AGR_A 0.5436242
4      S    U BERIMBAU_AGR_B 0.4597701
5      P    G BERIMBAU_AGR_A 0.8580645
6      P    G BERIMBAU_AGR_B 0.8536585
7      P    U BERIMBAU_AGR_A 0.3087248
8      P    U BERIMBAU_AGR_B 0.3975904

> str(df.all)
'data.frame':   8 obs. of  4 variables:
 $ number    : Factor w/ 2 levels "S","P": 2 2 2 2 1 1 1 1
  ..- attr(*, "scores")= num [1:2(1d)] 0 -1
  .. ..- attr(*, "dimnames")=List of 1
  .. .. ..$ : chr  "P" "S"
 $ gram      : Factor w/ 2 levels "G","U": 1 1 2 2 1 1 2 2
 $ experiment: Factor w/ 4 levels "BERIMBAU_AGR_A",..: 1 4 1 4 1 4 1 4
 $ V1        : num  0.813 0.866 0.544 0.46 0.858 ...
4

4 に答える 4

5

df.all$numberは秩序だった要素である必要があると思います。試すdf.all$number <- ordered(df.all$number)

于 2009-11-13T16:07:37.727 に答える
5

場合によっては、これが不可能だと思います。

layerCake<-data.frame(group=c(rep("normal",4),rep("tumor",4)),
                      class=factor(rep(c("exon","intron","intergenic","unmapped"),2),levels=rev(c("exon","intron","intergenic","unmapped")),ordered=TRUE),
                      fraction=c(.02,.25,.50,.23,.015,.20,.555,.23)
)
layerCake[layerCake$group=='normal',"reads"]<-130948403*layerCake[layerCake$group=='normal',"fraction"]
layerCake[layerCake$group=='tumor',"reads"]<-200948403*layerCake[layerCake$group=='tumor',"fraction"]
g<-ggplot(layerCake, aes(x=factor(group),y=reads, fill=factor(class),order = as.numeric(class)))+xlab("Group")+scale_fill_discrete(name="Anno Class",breaks=c("exon","intron","intergenic","unmapped"))

スタックの正しい順序:
g + geom_bar(stat = "identity"、position = "stack") ここに画像の説明を入力してください

回避の順序が正しくありません:

g+geom_bar(stat="identity",position="dodge")

ここに画像の説明を入力してください

ggplotで順序を逆にしてみましょう。

g<-ggplot(lc, aes(x=factor(group),y=reads, fill=factor(class),order = -as.numeric(class)))+xlab("Group")+scale_fill_discrete(name="Anno Class",breaks=c("exon","intron","intergenic","unmapped"))
g+geom_bar(stat="identity",position="dodge")

サイコロなし

データフレームを並べ替えてみましょう

lc <- with(lc, lc[order(-as.numeric(class)), ])
g<-ggplot(lc, aes(x=factor(group),y=reads, fill=factor(class),order = -as.numeric(class)))+xlab("Group")+scale_fill_discrete(name="Anno Class",breaks=c("exon","intron","intergenic","unmapped"))
g+geom_bar(stat="identity",position="dodge")

いいえ

于 2012-04-16T17:22:06.980 に答える
4

ハドリーは解決策を提供しました。これが問題と解決策の複製です。

目標は、「S」というラベルの付いたバーを「P」というラベルの付いたバーの前に配置することです。Rはアルファベット順にレベルを並べるため、これはデフォルトでは発生しません。

df <- read.csv("http://pealco.net/code/ggplot_dodge/df.txt")
ggplot(df, aes(gram, V1, fill=number))
    + geom_bar(stat="identity", position="dodge")

ハドリーが別の回答でコメントしたように、「y変数ではなく、x変数に基づいて並べ替える必要があります」。なぜこれが機能するのかわかりませんが。

この例の係数の順序を反転するには、係数を数値に変換して-1を掛けます。

df <- with(df, df[order(gram, -as.numeric(number)), ])

なぜ機能するのかについて、もう少し説明が必要df <- with(df, df[order(gram, -as.numeric(number)), ])です。

于 2009-11-14T19:13:19.927 に答える
1

ファクターレベルを変更すると、回避されたバーの順序が実際に変更されます。よくある落とし穴:色はまだ特定の位置にとどまっているので、一目見ただけで順序が変わっていないように見えます。しかし、値を見ると、順序が実際に変更されていることがわかります。

編集:以下の私の以前の答えは、バーに与えられた配色の順序のみを変更します。バーの順序を変更すると同時に配色を逆にしたい場合があるため、これは依然として便利です。

バーの色を手動で塗りつぶしたかったので、scale_fill_manualを使用していました。

ggplot(data, aes_string(x = "countries", y = "population", fill = "agegroups")) +
scale_fill_manual(values = CustomColorFunction(), limits = (levels(data$agegroups)))

ファクターレベルの変更とデータフレームの配置を5時間かけて調整し、これが誰かに役立つことを願っています。

于 2017-08-04T07:41:31.700 に答える