2016-03-25 13 views
2

は、私は長い間、このRスクリプトを実行されている、それは常に完璧に働いたが、今日、私は新しい同僚のコンピュータにロードされ、私のグラフは違っ出て来ていた気づいたときに明確に定義されていません! 。勘に私は私のマシン上でggplot2再インストールし、今、私のプロットは、私の同僚のと同じです。Rのggplot2エラー:スタッキングYMIN = 0

Var1 Var2 value Var3 
1 A Total -20.3681969 Total 
2 B Total -7.8687517 Total 
3 C Total -5.5482684 Total 
4 D Total -5.380664 Total 
5 E Total -1.6060702 Total 
6 F Total -1.5844055 Total 
7 G Total -1.571284 Total 
8 H Total -0.2576642 Total 
9 I Total -0.2448856 Total 
10 J Total -0.2114562 Total 
11 K Total -26.2567781 Total 
12 L Total -18.3848686 Total 
13 A Ghost 0 Ghost 
14 B Ghost -20.3681969 Ghost 
15 C Ghost -28.2369485 Ghost 
16 D Ghost -33.7852169 Ghost 
17 E Ghost -39.1658809 Ghost 
18 F Ghost -40.7719511 Ghost 
19 G Ghost -42.3563566 Ghost 
20 H Ghost -43.9276406 Ghost 
21 I Ghost -44.1853049 Ghost 
22 J Ghost -44.4301904 Ghost 
23 K Ghost -18.3848686 Ghost 
24 L Ghost 0 Ghost 

と積み上げ棒グラフを作成します:

スクリプトは次のようになりますデータセットを取る

ggplot(data=myData, aes(x=Var1, y=value, fill=Var3, order=-as.numeric(Var2))) + geom_bar(stat="identity")+ 
    theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) + 
    labs(x="", y="") + 
    scale_y_continuous(labels=format_si()) + 
    ggtitle("myData") + 
    guides(fill=FALSE) + 
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

enter image description here

私の問題は、ggplot2を再インストールするには、その前にあります緑色のバーが上に出ました(x軸と紫色のバーの間)。私は新しい治療法が私が上で参照した警告(あまりにも前にそのメッセージを受けていたにもかかわらず)と関係があると思います。すべての出力が負であるので、負の値を扱う方法をggplot2に伝える方法はありますか?緑のバーを明示的にx軸に置く方法はありますか?私はggplot2の呼び出しで注文オペレータを混乱させようとしましたが、動作させることができませんでした。ご協力いただきありがとうございます!

+1

注文審美がなくなり、statが「同一性」である場合、バーはデータに表示されている順番に並べられるので、実際の行を並べ替えてバーセグメントの順序を変更する必要があります。 – joran

答えて

2

joranが彼のコメントで指摘するように、order美的はもはやggplot2> = 2.0.0でサポートされていません。また、積み重ねた棒の順序はもはや因子レベルの次数によって決定されない。その代わりに、データの行を、バーを並べ替える順序で並べ替える必要があります。

myData <- dplyr::arrange(myData, Var3, Var1) 

しかし、一般的には、アルファベット順はあなたが望むものではないかもしれません:あなたはちょうどアルファベット順に注文することができますので、あなたの場合は

が、これは比較的簡単です。しかし、代わりに順序付けられた要素を使うことができます。あなたが見ることができるように

myData$Var3 <- ordered(myData$Var3, levels = c("Ghost", "Total")) 
myData <- dplyr::arrange(myData, Var3, Var1) 
head(myData) 
## Var1 Var2  value Var3 
## 1 A Ghost 0.00000 Ghost 
## 2 B Ghost -20.36820 Ghost 
## 3 C Ghost -28.23695 Ghost 
## 4 D Ghost -33.78522 Ghost 
## 5 E Ghost -39.16588 Ghost 
## 6 F Ghost -40.77195 Ghost 

Var3"Ghost"を持つ行は今最初に来る:これらはあなたがカスタマイズされた順序を持つことができます。

ggplot(data=myData, aes(x=Var1, y=value, fill=Var3)) + 
    geom_bar(stat = "identity") 

enter image description here

を警告メッセージが消えない、バーの順序は、それとの接続を持っていないようです:

は今、プロットは、バーはあなたが尋ねた道を命じました。しかしy=-valueと、上記のようにプロットしてみてください:あなたはあなたのデータで正の値のみを持っている場合は、消えます。したがって、負の長さの棒をプロットすると、警告が表示されるようです。しかし、私は理解しているとは言えません。なぜこれが当てはまるのですか?

+0

負の値で棒グラフを積み重ねるときの警告は、常に(少なくとも私が覚えている限り)存在しています。私は、負の値を持つ棒がいくつかあり、何もない場合は、ユーザーが望んでいたことを伝えるのが難しいという考えを指していると思います:負の値を持たない棒がゼロから始まるか、個人的には、私はおそらく行動を選んで警告を消してしまったでしょうが、それは私だけです。 – joran

+0

@joran yiurの洞察に感謝します! – Stibu

+0

その作品、ありがとう! – user3390169

0
myData$Var2 <- factor(myData$Var2, levels = rev(levels(myData$Var2))) 

これが役立ちます。また、あなたはggplotに=順番にas.numeric()を変更する必要があります。

+0

これは、 'myData $ Var2'が既に要素(それはわかっているかもしれません)の場合にのみ意味があります。これは2つの理由からOPを助けにはなりません:1)彼はプロットに 'Var3'、ない' Var2'を使用しています。 2)ジョランによって指摘されているように、棒の順序は因子レベルの順序ではなく、データの行順によって決定されます。したがって、これは棒の順序を変更しません。 – Stibu

+0

答えが急いで、不正確であることを指摘してくれたことに同意しました! –