7

AとBの2つの列を持つデータフレームがあります。AとBの値を並べて(覆い焼き)プロットした棒グラフを作成したいと思います。グーグルで検索して、パッケージggplot2からggplotを見つけました。デフォルトでは、頻度を使用して棒グラフを生成しますがstat="identity"、変数を選択して棒の高さを明示的に設定できるオプションがあります。次のように1つの列をプロットできます。

d <- data.frame(A=c(1:10), B=c(11:20))
ggplot(data=d, aes(x=1:length(A), y=A))+geom_bar(stat="identity", position="dodge")

2つの列を並べてプロットするにはどうすればよいですか?データフレームを別の方法で構造化できます。ベクトルAとBの値を1つの列に追加し、インジケーター変数を作成しindてから、それを使用してグループを定義しますaes(group=ind)dこれは、構造を変更せずに、データフレームをそのまま使用して実行できますか?

4

2 に答える 2

7

パッケージから使用meltして、reshape2探しているようなプロットを作成できます。

library(reshape2)
d$ind <- seq_along(d$A)

d.m <- melt(d, id.var='ind')

ggplot(d.m, aes(x=ind, y=value, fill=variable)) + 
  geom_bar(stat='identity', position='dodge')

一般にggplot、単一のdata.frameですべてのデータを提供する場合に最適に機能します。geomタイプごとに少なくとも1つのdata.frame。

于 2013-01-29T16:24:12.633 に答える
4

これを行う唯一の良い方法は、「ggplot」関数のニーズに合うようにデータを再配置することです。ただし、すべてを一列に並べて実行したい場合は、可能です。次のように、データを手動で再形成する必要があります。

ggplot(data=data.frame(value=c(d$A, d$B), variable=c(rep("A",10),rep("B",10))), aes(x=c(1:10,1:10), y=value, fill=variable))+geom_bar(stat="identity", position="dodge")

ここでは、古いデータフレームから新しいデータフレームを作成し、対応する変数名を割り当てました(これは、「reshape2」パッケージが「melt」関数で行うことです)。次に、x値を手動で「A」に1:10、「B」に1:10に割り当てて、バーが1:20から順番に表示されるのではなく、隣り合って表示されるようにしました。「A」または「B」を表すようにバーの色を変更するために、「fill」引数を追加しました。

于 2013-01-29T16:45:30.660 に答える