2016-05-10 31 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)