7

集合体データを使用して積み上げ棒グラフを作成するのに問題があります。他の人のレポートから集計テーブルを処理するときは、通常Excelを使用しますが、すべてのグラフをRで、おそらくラティスまたはggplotを使用して開始したいと思います。Excelでは、次の集計データの積み上げ棒グラフを数回クリックするだけで(挿入、縦棒グラフ、積み上げ縦棒)、次のようになります。ここに画像の説明を入力してください

RIでこのグラフを作成するだけでなく、ggplotのファセットを使用することもできます。つまり、2つの積み上げ棒グラフをggplotに並べて、2つのグループ(AとB)を比較します。他のグラフを試してみましたが、これが最良の選択のようです。これはデータです。ExcelのグラフにはグループAのみが表示されます(数値はパーセンテージです)。

D<-as.data.frame(structure(list(Group = c("A", "A", "A", "A", "A", 
"A", "B", "B", "B", "B", "B", "B"
), Education = c("NVQ Level 4 and above", "NVQ Level3", "NVQ Level 2", 
"Below NVQ Level 2", "Other qualification", "No qualification", 
"NVQ Level 4 and above", "NVQ Level3", "NVQ Level 2", "Below NVQ Level 2", 
"Other qualification", "No qualification"), Full.Time = c(47, 
27, 23, 17, 18, 9, 36, 26, 22, 22, 27, 12), PT.16.hours = c(20, 
24, 22, 18, 18, 12, 22, 21, 21, 22, 14, 10), PT.16.hours.1 = c(12, 
11, 10, 11, 13, 5, 24, 25, 25, 20, 16, 12)), .Names = c("Group", 
"Education", "Full.Time", "PT>16.hours", "PT<16.hours")))

2つのグループの違いを示すファセットに到達する前に、ggplot2を使用して単一の積み上げ棒グラフ(上記のような)を作成するのに実際に問題があります。3つの変数(FullTime、PT、PT> 16時間)ではなく、ケースごとに1つの行を使用する必要があると思います。したがって、

A    NVQ Level 4 and above      47  20  12
A    NVQ Level3                 27  24  11

私が持っている必要があります

Group          Education    Work     Percentage
A   NVQ Level 4 and above   Full Time   47
A   NVQ Level 4 and above   PT>16 hours 20

これがggplotにグラフを作成させる唯一の方法である場合、数行のコードで1つの形式から別の形式にどのように変更しますか?私はこのタイプのデータをよく見つけるので、標準化された手順を使用するとよいでしょう。また、ggplotオプションの「identity」を試してみましたが、あまり成功していません。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

8

reshapeあなたのデータ:

library(reshape2)
df <- melt(D)

そして、単にそれをプロットします:)

ggplot(df, aes(x = factor(Education), y = value, fill = factor(variable))) +
geom_bar() + facet_grid(.~Group) +
ylab('') + xlab('') + opts(title = '') + scale_fill_discrete('') +
theme_bw() +
opts(axis.text.x=theme_text(angle = 45, hjust = 1, vjust = 1))

最初の行でセットの美学を作成し、2番目の行でbarレイヤーを追加facetし、3行目でプロットから不要なテキストを削除し、4行目でb&wテーマを設定し、最後の行でxasisラベルを回転させます。

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

于 2012-07-28T20:04:28.770 に答える
3

秘訣はmeltplyrpackateから3つの測定された列を1つに溶かして(という名前の新しい列)、グループ化valueするための識別列(という名前)と一緒に使用することです。variable

require(ggplot2)
require(reshape)

# first we need to get Full.Time, PT.16, etc. into one column
df <- melt(D, .measure.vars=.(Full.Time, PT.16.hours, PT.16.hours.1))
ggplot(df, aes(x=Education, y=value, fill=variable )) +
  geom_bar(stat="identity")

残りは要素を並べ替えるだけなので、出力は必要なものと一致します。

dfggplot2の一般的なワークフローであるため、メルトが最終的に何をするかを確認してください。

プロット

係数を使用してファセットプロットに移動するにはGroup、適切なものを追加する必要がありますfacet_wrap

ggplot(df, aes(x=Education, y=value, fill=variable )) +
  geom_bar(stat="identity") +
  facet_wrap(~ Group)

ファセットプロット

于 2012-07-28T19:52:14.027 に答える