讓我們先來生成數據和hist
對象:
set.seed(0) ## added for reproducibility
g <- rnorm(2000, 5, 1)
h <- hist(g, breaks = 50, plot = FALSE)
我已經通過暫時抑制plot = FALSE
繪製。
的問題是,我們希望有兩個Y軸:
基本上我們在兩個軸上密度值添加蜱痕,但
- 顯示相應計數/頻率上的左邊的一個;
- 正確的顯示密度值。
hist
對象的密度值爲h$density
。對於漂亮的圖形,我們應用 pretty()
讓勾號標記的位置:
pos <- pretty(h$density, n = 5)
# [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6
找到相應的罪名在pos
,我們這樣做:
freq <- round(pos * length(g) * with(h, breaks[2] - breaks[1]))
# [1] 0 20 40 60 80 100 120
這裏使用的round()
只是爲了確保由有限精度計算引入的數字被丟棄,所以我們以整數結束。
現在我們準備好生成我們的綜合直方圖。請記住增加右邊距以爲右軸的軸名稱保留一些空間。以下我們將右邊距設置爲與左邊距相同。
new.mai <- old.mai <- par("mai")
new.mai[4] <- old.mai[2]
par(mai = new.mai)
graphics:::plot.histogram(h, freq = FALSE, col="bisque", main="Integrated Histogram",
xlab = paste0("Cr","(mg/dL)"), ylab="Frequeny",
border="black", yaxt='n')
Axis(side = 2, at = pos, labels = freq)
Axis(side = 4, at = pos, labels = pos)
mtext("Density", side = 4, line = 3)
lines(density(g), col="dimgray")
par(mai = old.mai)
注意我如何使用的graphics:::plot.histogram
繪製一個hist
對象,mtext
上邊距添加文本。有關更多信息,請參閱?plot.histogram
和?mtext
。
謝謝李哲源!這工作完美,我不必停止使用hist()。 –
李哲元,是的,這很酷!我希望我能夠upvote你的答案! –
我剛剛做到了!非常酷,非常感謝你! –