计算最大直方图值

时间:2012-03-31 19:35:15

标签: r ggplot2

如何在制作情节时计算最大直方图值?

我想在带有注释的绘图上放置一条线,我希望文本的位置与y轴最大值成比例。例如:

library(ggplot2)
df <- data.frame(x = runif(1000))


p <- ggplot(data=df, aes(x)) + geom_histogram()
p + geom_vline(aes(xintercept=0.5),color='red') + geom_text(aes(0.55, 10, label='line'), angle = 90, color='red')

产生以下内容:

enter image description here

我想将geom_text()的参数传递给最大直方图值1/3,因为我认为这是一致地定位文本的最佳方式,但我不知道如何计算此count值。

3 个答案:

答案 0 :(得分:4)

stat_bin默认使用binwidth = range / 30。我不确定它是如何计算的,但这应该是一个相当合理的近似值:

max(table(cut(df$x,seq(min(df$x),max(df$x),dist(range(df$x))/30)))) 

答案 1 :(得分:1)

一般来说,一个简单的一维最大发现搜索实现如下(在我的例子中,在ANSI-C中);

#include <stdio.h>
#include <errno.h>
int printMaxHistValue(int* yValues, int* xValues, int numPoints) {
  int i, currentY=0, currentX=0, maxX=0, maxY=0, maxIndex=0;

  if(numPoints <= 0) {
    printf("Invalid number of points in histogram! Need at least 1 point! Exiting");
    return EINVAL;
  }


  // Find the values
  for(i=0; i<numPoints; i++) {
    currentX = xValues[i];
    currentY = yValues[i];
    if(currentY > maxY) {
      maxY = currentY;
      maxX = currentX;
      maxIndex = i;
    }
  }

  // Finished with search
  printf("Found the maximum histogram value of y=%d at bin/x-value of %d (which corresponds to i=%d)",maxY,maxX,maxIndex);

  // Done
  return EOK;
}

希望这个例子有用:)

答案 2 :(得分:1)

您可以使用hist函数来计算计数。只要确保你传递与geom_histogram相同的bin break。在不向geom_histogram提供binwidth的情况下,默认为范围/ 30。从查看geom_histogram如何生成垃圾箱我认为这应该有效:

require(plyr)
min.brea <- round_any(min(df$x), diff(range(df$x))/30, floor)
max.brea <- round_any(max(df$x), diff(range(df$x))/30, ceiling)
breaks <- seq(min.brea, max.brea, diff(range(df$x/30)))
histdata <- hist(df$x, breaks=breaks, plot=FALSE, right=FALSE)
max.value <- max(histdata$counts)

round_any函数来自plyr。