C#日期/数值轴比例

时间:2010-08-24 04:43:04

标签: c#

我正在开发一个直方图容器类,我正在尝试确定垃圾箱的截止点应该在哪里。我希望截止点看起来很漂亮,就像图表缩放一样。

将我的请求提炼成一个基本问题:是否有一种基本方法可以从数字列表中确定数据轴标签。

例如:

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来舍入到最接近的整数。我希望它适用于大量数字和非常小的数字,也可能适用于日期;虽然日期可以转换为双打并以这种方式解析。

非常感谢有关该主题的任何资源。

1 个答案:

答案 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等间隔空间点。