14

私はかなり一般的な棒グラフを取得しようとしていますが、Rでのプロットに関する大量のドキュメント、およびggplotとそのすべてのレイヤーのドキュメントを読んだにもかかわらず、このプロットを希望どおりに取得できません。

私のデータはかなり単純です。

aov.data
   Block    RTreg    RTrnd
1 Block1   0.0000 862.0707 
2 Block2 667.2081 770.4315 
3 Block3 645.4730 696.0200
4 Block4 674.5200 659.4765
5 Block5 651.4295 633.7333

私が取得したいのはBlock、x軸に列があり、カテゴリ変数として機能する棒グラフです。y軸にはRTregRTrndと列をプロットするための値が必要です。これは私が正しく理解できない部分です。私が欲しいのは、x軸の目盛りごとに2本のバーがないことです。そのブロック内のの値をRTreg表す1つのバーと、そのブロック内のの値を表す1つのバーRTrnd。このようなもの:

有効なXHTML

しかし、2本ではなく2本のバーが5セットあります。

これまで、次のコードを使用しました。

ggplot(aov.data,aes(x=Block)) + 
          geom_bar(aes(y=RTreg),stat="identity",position="dodge",col="blue") +
          geom_bar(position="dodge") +   
          geom_bar(aes(y=RTrnd),stat="identity",position="dodge",col="red")

私がやっていることは、最初にブロックを含むカテゴリx軸を使用してベースプロットを作成することでした。次に、geom_bar最初にRTreg列を追加し、2番目geom_barに列を追加していると思いましたRTrnd。私は2つのバーを並べて取得するつもりでしたが、オプションpositionは私と同じです。dodgeしかし、私が得ているプロットは次のとおりです。

有効なXHTML

2つのバーを並べて、できればそれぞれに異なる色と凡例を付ける方法について何かアイデアはありますか?ここでいくつかのガイダンスをいただければ幸いです。

前もって感謝します。

4

2 に答える 2

32

データフレームの形状をワイドからロングに変更する必要があります。その後、条件ごとに個別にバーを設定する必要はありません。

データフレームの名前が。であると仮定しますdf

library(reshape2)
df.long<-melt(df)
ggplot(df.long,aes(Block,value,fill=variable))+
     geom_bar(stat="identity",position="dodge")

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

于 2013-03-01T12:55:50.587 に答える
2

ネイティブR関数を使用する代替アプローチ:

#Taking the Dataset mentioned in the question
df = data.frame(Block = c("Block 1", "Block 2", "Block 3", "Block 4", "Block 5"), RTreg = c(0.0,667.208,645.47,674.52,651.42), RTrnd = c(862.07,770.43,696.02,659.476,633.733))

#Create a Matrix which will help in creating the plot
value_matrix = matrix(, nrow = 2, ncol = 5)
#An empty matrix is a necessary requirement prior to copying data
value_matrix[1,] = df$RTreg 
value_matrix[2,] = df$RTrnd

#Note that the "beside" argument has to be kept "TRUE" in order to place the bars side by side
barplot(value_matrix, names.arg = df$Block, beside = TRUE, col = c("peachpuff", "skyblue"), legend.text = c("RTreg", "RTrnd"))

上で何が起こりますか?

barplot()これに答えるために、まず、すなわち「高さ」の最初の引数に注意を向けたいと思います。ここで、入力としてベクトルを指定すると、関数は、期待どおりに通常の棒グラフを生成します。ただし、クラスター化された棒グラフをプロットするには、データをマトリックス形式で提供する必要があります。さて、ここに魔法が入ります。クラスター化された棒グラフの場合、変数は通常の列ではなく、行列の行に存在する必要があります。私が言いたいのは、列に沿ってデータを保存する代わりに、次のことです。

   RTreg     RTrnd
1  0.0000    862.0707 
2  667.2081  770.4315 
3  645.4730  696.0200

行全体にデータを保存します。

       1        2        3
RTreg  0.0000   667.2081 645.4730
RTrnd  862.0707 770.4315 696.0200

これはbarplot()、2つの異なる変数「RTreg」と「RTrnd」を認識する方法です。クラスターに入れたい他の変数がm個ある場合は、の'nrow'引数matrix()mに設定した後、それらを行列の行全体にコピーするだけです。ここで、上記の構造を実現するために、空の行列を作成し、1行目と2行目にそれぞれ「RTreg」と「RTrnd」をコピーしました。マトリックスが作成されたら、準備は完了です。行列とともに関数をheight引数として呼び出すだけで、 'beside'引数をTRUEbarplot()に設定することを忘れないでください。

上記のコードの結果:

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

于 2019-06-22T14:19:31.233 に答える