2016-06-11 15 views
1

私はggplot2を使用しています。デフォルトでは、ビン幅が固定されたヒストグラムが作成され、ビンのラベルは各ビンの中央にプロットされます。私が代わりに欲しいビンエッジにラベルを合わせてRで可変幅のヒストグラムを作成するにはどうすればよいですか?

は、そのビンのラベルこのプロットのように、各ビンのエンドポイントの代表である可変幅のヒストグラムである。この例のプロットを作成するには

desired plot

、私は手動で入力しましたビンのパラメータを変更し、ビンをエンドポイントに揃えます。

income=data.frame(lx=c(0,10,25,50,100),rx=c(10,25,50,100,150),y=c(20,28,27,18,7)) 
income$width = income$rx-income$lx 


ggplot(income, aes(lx+width/2,y/width)) + geom_bar(aes(width=rx-lx), color='black', stat='identity') + 
    scale_x_continuous(breaks=unique(c(income$lx,income$rx))) + labs(x='Income (thousands of $)', y='% per thousand $') 

元のデータから自動的にこれを実行します。 (元のデータが、次のコードを使用して近似することができる):

+0

あなたは10、25、50、などのラベルの話をしていますか?しかし、このコードをRで実行すると、結果は希望のヒストグラムと同じに見えますか? –

+0

探しているソリューションの種類を詳しく教えてください。指定されたコードが変更されずに目的のエフェクトを作成します。 –

+0

私は元のデータを使用してこれを自動的に行いたいと思います(「収入」データフレームを参照)。私の例は、ビンの手書き表現です。 – Teajay

答えて

1
incomes=unlist(sapply(1:nrow(income), function(i) sample(income$lx[i]:(income$rx[i]-1),income$y[i],replace=TRUE))) 
widths=unlist(sapply(1:nrow(income), function(i) rep(income$rx[i]-income$lx[i],income$y[i]))) 
incomes=data.frame(incomes, widths) 

あなたgeom_histogramで所望breaksを指定することにより、可変幅のヒストグラムを生成することができます。 y=..density..(カウントに基づくデフォルトではなく)を使用します。これにより、バーは、バーの総面積の割合に正規化されます。

breaks = c(0,10,25,50,100,150) 

ggplot(incomes, aes(incomes)) + 
    geom_histogram(aes(y=..density..), 
       color="black", fill="grey40", breaks=breaks) + 
    scale_x_continuous(breaks=breaks) 

enter image description here

関連する問題