我正在开发一个直方图容器类,我正在尝试确定垃圾箱的截止点应该在哪里。我希望截止点看起来很漂亮,就像图表缩放一样。
将我的请求提炼成一个基本问题:是否有一种基本方法可以从数字列表中确定数据轴标签。
例如:
Array{1,6,8,5,12,15,22}
有5个箱子是有意义的。
Bin Start Count
0 1
5 3
10 2
15 0
20 1
bin启动内容与在此实例中选择图表上的轴标签相同。
出于这个问题的目的,我并不关心箱子和直方图,我对问题的图表比例轴标签部分更感兴趣。
我将使用C#4.0作为我的应用程序,所以欢迎使用linq的漂亮解决方案。
我在遥远的过去使用一些基本的10缩放内容尝试了这样的东西,但我从来没有让它在这个应用程序中足够详细地工作。我不想做日志缩放,我只是使用基数10来舍入到最接近的整数。我希望它适用于大量数字和非常小的数字,也可能适用于日期;虽然日期可以转换为双打并以这种方式解析。
非常感谢有关该主题的任何资源。
答案 0 :(得分:0)
你可以从简单的事情开始:
NUM_BINS is a passed argument or constatn (e.g. NUM_BINS = 10)
x is your array of x-values (e.g. int[] x = new int[50])
int numBins = x.Length < NUM_BINS ? x.Length : NUM_BINS;
此时你可以计算xPoints的直方图,并且如果xPoints被重度加权到分布的一侧(可能只计算中点左侧与中点右侧),则在x的范围内使用log / exp除法[]。如果直方图是平的,则使用线性分割。
double[] xAxis = new double[numBins];
double range = x[x.Length-1] - x[0];
CalcAxisValues(xAxis, range, TYPE); //Type is enum of LOG, EXP, or LINEAR
此函数将根据TYPE等间隔空间点。