2017-03-22 14 views
0

previous questionでは、ヒストグラムの上に周波数ポリゴンを重ねる方法を尋ねました。その問題は解決されました。今私は別の問題があります。周波数ポリゴンのクラスマークが各ヒストグラムバーの中央にくるようにします。 クラス・マークは、クラスの真ん中の値であり、ヒストグラム・バー(a.k.a.、 "classes")の上限と下限を平均して求められます。周波数ポリゴンを描画していた場合は、各ヒストグラムクラス(またはバー)の中央に点を描画して接続します。しかし、次のコードを実行すると、周波数ポリゴンは「広がり」、ヒストグラムと同じ軸値を持ちません。Rのヒストグラムの上に周波数ポリゴンの軸を同期させる方法はありますか?

# declare your variable 
data <- c(10, 7, 8, 4, 5, 6, 6, 9, 5, 6, 3, 8, 
+ 4, 6, 10, 5, 9, 7, 6, 2, 6, 5, 4, 8, 7, 5, 6) 

# find the range 
range(data) 

# establish a class width 
class_width = seq(1, 11, by=2) 
class_width 

# create a frequency table 
data.cut = cut(data, class_width, right=FALSE) 
data.freq = table(data.cut) 
cbind(data.freq) 

# histogram of this data 
hist(data, axes=TRUE, 
breaks=class_width, col="slategray3", 
border = "dodgerblue4", right=FALSE, 
xlab = "Scores", xaxp=c(1, 11, 10), 
yaxp=c(0, 12, 12), main = "Histogram and Frequency Polygon") 

# paint the frequency polygon over the histogram 
par(new=TRUE) 

# create a frequency polygon for the data 
plot(data.freq, axes=FALSE, type="b", ann=FALSE) 

ここに、RGuiが生成するイメージがあります。私はRを実行しようとしていることを示す赤い線を描画するために、MSペイントを使用している。 2つのプロットは、同じy軸値を持つように見えます。 2つのプロットで同じx軸値を共有するにはどうすればよいですか?ありがとう!

Histogram, Edited by MS Paint

答えて

2

あなたhist(...)から(見えない)出力を見れば、あなたは役に立つかもしれないいくつかのプロパティが表示されます。特に:$mids。 (彼らは?histで明確に定義されている。)

histコールまで、あなたのデータアップの使用:これがあれば

lines(h$mids, data.freq) 

par(new=TRUE)はただの行を追加するための

h <- hist(data, axes=TRUE, 
    breaks=class_width, col="slategray3", 
    border = "dodgerblue4", right=FALSE, 
    xlab = "Scores", xaxp=c(1, 11, 10), 
    yaxp=c(0, 12, 12), main = "Histogram and Frequency Polygon") 
str(h) 
# List of 6 
# $ breaks : num [1:6] 1 3 5 7 9 11 
# $ counts : int [1:5] 1 4 12 6 4 
# $ density : num [1:5] 0.0185 0.0741 0.2222 0.1111 0.0741 
# $ mids : num [1:5] 2 4 6 8 10 
# $ xname : chr "data" 
# $ equidist: logi TRUE 
# - attr(*, "class")= chr "histogram" 

必要がありませんを使用する必要がある簡略化した例では、par(new=TRUE)を使用する必要があります.2つ目の行のxlim/ylimを設定し、適切なXポイントを与える。 (あなたがそれを実現しないかもしれませんが、2番目のプロットは、ここ1:5のX値を推測される。見るためにちょうどplot(data.freq)を行います。)

par(new = TRUE) 
xlim <- range(class_width) 
ylim <- c(0, max(h$counts)) 
plot(h$mids, data.freq, axes = FALSE, type = "b", ann = FALSE, 
    xlim = xlim, ylim = ylim) 
+0

をこれはまさに私がStackOverflowのようになってきている深く便利助けです!洞察力のある答えをありがとうございました。完璧! – Andy

+0

喜んでお手伝いします...そして9K以上の私をぶつけてくれてありがとう:-) – r2evans

関連する問題