2012-03-04 10 views
2

棒高さが1に標準化された棒グラフを作ることができるかどうか教えてもらえますか? 。各バーの幅が違う、geom_barとggplot2の "position = fill"を使って

例:このプロット

ggplot(mtcars, aes(x=factor(cyl), fill=factor(vs))) + geom_bar(position="fill") 

、その後はposition_fillでその「幅」パラメータ(よくある

table(factor(mtcars$cyl)) 

に比例した3つのバーの幅を作る)が、それはしなければなら定数、それはありませんか?私は少しさらに試みたが、メッセージを取得する

: "position_fillは一定の幅を必要とする"

だから私は何を私取得する推測

はEDIT

フランソワ

、ありがとう少なくともgeom_barを使用して取得することは不可能です。

+1

が重複する可能性が? http://stackoverflow.com/questions/5948604/variable-width-bars-in-ggplot2-barplot-in-r –

+0

これは、「hist」を使ってヒストグラムプロットを生成することとほぼ同等です。 –

答えて

1

私はではなく、完全に単一ggplotコール内、データを前処理することによってそれを行うことができます。

:それは警告を投げるん

> mt 
    cyl vs n  nfrac  width 
1 4 0 1 0.09090909 0.7857143 
2 4 1 10 0.90909091 0.7857143 
3 6 0 3 0.42857143 0.5000000 
4 6 1 4 0.57142857 0.5000000 
5 8 0 14 1.00000000 1.0000000 

ggplot呼び出しが

ggplot(mt, aes(x=factor(cyl), fill=factor(vs), y=nfrac)) + 
    geom_bar(aes(width=width), position="stack", stat="identity") 

次のようになります。今設定

library("plyr") 
mt <- ddply(mtcars, .(cyl, vs), summarise, n=length(cyl)) 
mt <- ddply(mt, .(cyl), mutate, nfrac = n/sum(n), width = sum(n)) 
mt$width <- mt$width/max(mt$width) 

mtデータは、すべてがプロットを作成する必要がありました

Warning message: 
position_stack requires constant width: output may be incorrect 

しかし、プロット作成します。

enter image description here

1

これはあなたが望むものですか?

library(ggplot2) 
ggplot(mtcars, aes(x=factor(cyl), fill=factor(vs))) + geom_bar(position="fill") + coord_flip() 

enter image description here

+0

いいえ、私がしようとしていたことは@Geekのリンクに投稿された投稿に示されています。彼らがそこで説明したことを試してみる。とにかくあなたの答えをありがとう。 – fstevens

関連する問題