2016-05-10 62 views
0

我使用ggplot2繪製從正態分佈中抽取的大小爲1000的樣本的直方圖。我需要將字母'A'放在直方圖的中心,並使用函數annotate來執行此操作。R ggplot2直方圖中最頻繁的bin

由於這個矢量是隨機的,每次我運行代碼時,圖形的「中心」都會改變一點點,所以我需要找到一種方法,讓函數知道如何根據該方法放置'A'對於x軸,我取Y軸樣本的中位數,我正在考慮取最頻繁的bin的頻率併除以2.

有沒有人知道是否有函數會給你每個垃圾箱的頻率?

這裏是一個重複的例子:

library(ggplot2) 
set.seed(123) 
x <- rnorm(1000) 
qplot(x, geom="histogram") 
+2

請閱讀(1)[我如何問一個好問題](http://stackoverflow.com/help/how-to-ask),(2)[如何創建一個MCVE](http://stackoverflow.com/help/mcve)以及(3)[如何提供最小的r可在R中生成的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610)。然後相應地編輯和改進您的問題。即,例如提供虛擬輸入數據,你嘗試過哪些代碼行等等 – lukeA

回答

3

這是一種方式來獲得的輸出曲線的座標(上重複的例子):

library(ggplot2) 
x <- runif(10) 
h <- qplot(x, geom="histogram") 
ggplot_build(h)$data 

這會給你各種關於直方圖的信息。

所以由兩個以獲得最頻繁的類和鴻溝的高度,您需要做的僅僅

height <- max(ggplot_build(h)$data[[1]]$count)/2 

使用相同類型的信息,你也可以把文本總是正確的中間的情節:

ranges <- ggplot_build(h)$panel$ranges 
xtext <- mean(ranges[[1]]$x.range) 
ytext <- mean(ranges[[1]]$y.range) 
h + annotate("text", xtext, ytext, 
    label="A", size=30, color="blue", alpha=0.5)