48

私はggplot関数を呼び出しています

ggplot(data,aes(x,y,fill=category)+geom_bar(stat="identity")

結果は、カテゴリに対応するさまざまな色で塗りつぶされたバーを持つ棒グラフです。ただし、色の順序はバーごとに一貫していません。ピンク、グリーン、ブルーがあるとしましょう。いくつかのバーは下から上にピンク、グリーン、ブルーになり、いくつかはグリーン、ピンク、ブルーになります。明らかなパターンは見当たりません。

これらの順序はどのように選択されますか? どうすれば変更できますか?少なくとも、どうすれば ggplot に一貫した順序を選択させることができますか?

(x,y およびカテゴリ) のクラスは、それぞれ (整数、数値、因子) です。カテゴリを順序付き因子にすると、この動作は変わりません。

誰でもこれを修正する方法を知っていますか?

再現可能な例:

dput(data)

structure(list(mon = c(9L, 10L, 11L, 10L, 8L, 7L, 7L, 11L, 9L, 
10L, 12L, 11L, 7L, 12L, 8L, 12L, 9L, 7L, 9L, 10L, 10L, 8L, 12L, 
7L, 11L, 10L, 8L, 7L, 11L, 12L, 12L, 9L, 9L, 7L, 7L, 12L, 12L, 
9L, 9L, 8L), gclass = structure(c(9L, 1L, 8L, 6L, 4L, 4L, 3L, 
6L, 2L, 4L, 1L, 1L, 5L, 7L, 1L, 6L, 8L, 6L, 4L, 7L, 8L, 7L, 9L, 
8L, 3L, 5L, 9L, 2L, 7L, 3L, 5L, 5L, 7L, 7L, 9L, 2L, 4L, 1L, 3L, 
8L), .Label = c("Down-Down", "Down-Stable", "Down-Up", "Stable-Down", 
"Stable-Stable", "Stable-Up", "Up-Down", "Up-Stable", "Up-Up"
), class = c("ordered", "factor")), NG = c(222614.67, 9998.17, 
351162.2, 37357.95, 4140.48, 1878.57, 553.86, 40012.25, 766.52, 
15733.36, 90676.2, 45000.29, 0, 375699.84, 2424.21, 93094.21, 
120547.69, 291.33, 1536.38, 167352.21, 160347.01, 26851.47, 725689.06, 
4500.55, 10644.54, 75132.98, 42676.41, 267.65, 392277.64, 33854.26, 
384754.67, 7195.93, 88974.2, 20665.79, 7185.69, 45059.64, 60576.96, 
3564.53, 1262.39, 9394.15)), .Names = c("mon", "gclass", "NG"
), row.names = c(NA, -40L), class = "data.frame") 

ggplot(data,aes(mon,NG,fill=gclass))+geom_bar(stat="identity")
4

6 に答える 6

68

ggplot2_2.0.0 以降、order美学は利用できなくなりました。塗りつぶしの色で並べ替えられたスタックを含むグラフを取得するには、並べ替えたいグループ化変数でデータセットを並べ替えるだけです。

arrangeこれにはfrom dplyrをよく使用します。ここでは、順序付けされたデータセットを作成するのではなく、呼び出しfill内の係数でデータセットを順序付けていますが、どちらでも問題なく動作します。ggplot

library(dplyr)

ggplot(arrange(data, gclass), aes(mon, NG, fill = gclass)) +
    geom_bar(stat = "identity")

これは、基本 R で簡単に実行できます。もちろん、classicorderと抽出ブラケットを使用します。

ggplot(data[order(data$gclass), ], aes(mon, NG, fill = gclass)) +
    geom_bar(stat = "identity")

両方のケースで結果として得られるプロットは、次の順序で表示されます。 ここに画像の説明を入力

ggplot2_2.2.0 アップデート

ggplot_2.2.0 では、塗りつぶし順序は因子レベルの順序に基づいています。デフォルトの順序では、最初のレベルがスタックの一番下ではなく 一番上にプロットされます。

スタックの最下部に最初のレベルが必要な場合は、で使用できreverse = TRUEますposition_stackgeom_colのショートカットとしても使用できることに注意してくださいgeom_bar(stat = "identity")

ggplot(data, aes(mon, NG, fill = gclass)) +
    geom_col(position = position_stack(reverse = TRUE))
于 2016-01-06T16:16:05.777 に答える
26

order美学も指定する必要があります。

ggplot(data,aes(mon,NG,fill=gclass,order=gclass))+
    geom_bar(stat="identity")

ここに画像の説明を入力

これはバグである場合とそうでない場合があります。

于 2013-03-06T19:05:56.383 に答える
6

注文するには、levelsパラメータを使用して注文を通知する必要があります。このような:

data$gclass
(data$gclass2 <- factor(data$gclass,levels=sample(levels(data$gclass)))) # Look the difference in the factors order
ggplot(data,aes(mon,NG,fill=gclass2))+geom_bar(stat="identity")
于 2013-03-06T16:19:12.253 に答える
4

機能を使用して色を変更できscale_fill_ます。例えば:

ggplot(dd,aes(mon,NG,fill=gclass)) + 
  geom_bar(stat="identity") + 
  scale_fill_brewer(palette="blues")

で一貫した順序を取得barsするには、データフレームを順序付ける必要があります。

dd = dd[with(dd, order(gclass, -NG)), ]

凡例の順序を変更するには、gclass係数を変更します。だから次のようなもの:

dd$gclass= factor(dd$gclass,levels=sort(levels(dd$gclass), TRUE))

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

于 2013-03-06T16:18:07.203 に答える