如何在制作情节时计算最大直方图值?
我想在带有注释的绘图上放置一条线,我希望文本的位置与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')
产生以下内容:
我想将geom_text()
的参数传递给最大直方图值1/3
,因为我认为这是一致地定位文本的最佳方式,但我不知道如何计算此count
值。
答案 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。