7

以下のようなデータセットをプロットする必要があるとします。

set.seed(1)
dataset <- sample(1:7, 1000, replace=T)
hist(dataset)

以下のプロットでわかるように、左端の 2 つのビンには、残りのビンとは異なり、それらの間にスペースがありません。

ここに画像の説明を入力

xlim を変更しようとしましたが、うまくいきませんでした。基本的に、各数字 (1 から 7) をビンとして表現したいと思います。さらに、隣接する 2 つのビンの間にスペースを空けたいと思います...ありがとう!

4

2 に答える 2

9

最良の方法は、breaks引数を手動で設定することです。コードのデータを使用して、

hist(dataset,breaks=rep(1:7,each=2)+c(-.4,.4))

次のプロットが得られます。

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

最初の部分はrep(1:7,each=2)、バーを中心に配置する数値です。2番目の部分は、バーの幅を制御します。あなたがそれを変えるならば、c(-.49,.49)彼らはほとんど触れるでしょう、あなたがそれを変えるならば、c(-.3,.3)あなたはより狭いバーを手に入れます。それを設定すると、ベクトルc(-.5,.5)に同じ数を2回含めることは許可されていないため、Rはあなたに怒鳴ります。breaks

なぜこれが機能するのですか?

ブレークベクトルを分割すると、次のような部分が得られます。

> rep(1:7,each=2)
 [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7

そしてこのように見える2番目の部分:

> c(-.4,.4)
 [1] -0.4  0.4

それらを足し合わせると、Rは2番目のベクトルを必要な回数ループして、最初のベクトルと同じ長さにします。だからあなたは

  1-0.4  1+0.4  2-0.4  2+0.4  3-0.4  3+0.4 [etc.]
=   0.6    1.4    1.6    2.4    2.6    3.4 [etc.]

したがって、0.6から1.4までの1つのバー(幅2 * .4の1を中心とする)があります。2* .4を中心とする1.6から2.4までの別のバーがあり、以下同様です。間にデータがある場合(たとえば2.5)、ヒストグラムは2.4から2.6までのバーを作成し、バーの幅が均一ではないため、ヒストグラムはちょっとばかげているように見えます(そのバーの幅はわずか0.2であるため、他のすべては.8)です。しかし、整数値だけでは問題ありません。

于 2013-01-18T05:10:35.477 に答える
-3

7本のバーではなく6本のバーが必要です。それはあなたのヒストグラムがスペースを持っているものです。しかし、その後、7つのバーを生成することになります。それがバグです。

sample(1:7、1000、replace = T)の代わりにsample(1:6、1000、replace = T)を実行します

7本のバーが必要な場合は、0でシードします

于 2013-01-18T05:10:25.277 に答える