C# 图表轴的步长计算

C# 图表轴的步长计算,c#,algorithm,charts,report,axis-labels,C#,Algorithm,Charts,Report,Axis Labels,我需要计算图表y轴的步长,以便它总是有7个刻度,通常是特定数量的刻度。未指定数据范围,因此y轴的值可能类似于: -2,2,3 -105,0.5,10 -5、10、80.6、120等 是否有任何算法,特别是它的C实现,可以计算图表始终具有相同刻度数的步长 F.e.对于数字: -它将是-4.5,-3,-1.5,0,1.5,3,4.5 -105,0.5,10它将是-125,-100,-75,-50,-25,0,25 非常感谢您的帮助:下面所示的实现是用python实现的。如果你精通这两种语言,它的大部

我需要计算图表y轴的步长,以便它总是有7个刻度,通常是特定数量的刻度。未指定数据范围,因此y轴的值可能类似于:

-2,2,3

-105,0.5,10

-5、10、80.6、120等

是否有任何算法,特别是它的C实现,可以计算图表始终具有相同刻度数的步长

F.e.对于数字:

-它将是-4.5,-3,-1.5,0,1.5,3,4.5

-105,0.5,10它将是-125,-100,-75,-50,-25,0,25


非常感谢您的帮助:

下面所示的实现是用python实现的。如果你精通这两种语言,它的大部分元素将很容易直接翻译成C。一些语句可能需要一系列if语句或不同的方法

在程序中,最后四行是主程序。如图所示,main有一个循环来生成80个测试用例,大小从0.04几何增加到大约200。如果要进行更粗略的测试,请将40个尺寸更改为较小的数值,将1.24几何比更改为较大的数值。对于测试的每个尺寸,main调用stepShow两次,首先测试范围从尺寸的10%到110%,然后测试范围从-28%到82%。stepShow是一个调用stepCalc的测试例程,这是一个包含计算leftTick和tickSize的算法的例程,这是最左边的tick的位置和tick之间的间隔

stepCalc以span=maxhiVal,0-minloVal,0开始,这确保x=0将适合刻度范围。然后,decead=10**math.logspan/6.0//math.log10计算10的最大幂,但不大于跨度的1/6。Python的//运算符返回一个整数结果,**表示幂运算。multis=1,1.5,2,3,5,10如果decade==1,则1,2,5,10如果记号大小可能介于1和10之间,则将元组multis设置为1,1.5,2,3,5,10,否则将其设置为1,2,5,10。multis中m的循环代码:计算tickSize和leftTick值;当它们足够大时,它将跳出循环并返回它们

在这个程序的输出中,每种大小的两个测试用例通常具有相同的tickSize,但是当然,对于第一个用例,leftTick为零,对于第二个用例,leftTick为负。下面是一些示例行。程序结束后显示完整输出。每个5个数字组包括leftTick、loVal、hiVal、rightTick和tickSize的值

对于某些尺寸,tickSize在这两种情况下有所不同,如上面示例行的第一行和最后一行。虽然两个测试案例中的总跨度相同,为尺寸的110%,但如果loVal或hiVal不再都适合较小tickSize值覆盖的跨度,则当0刻度不在范围的末尾时,需要较大的tickSize值。在多元组中包含10可以处理这种情况

def stepCalcloVal,hiVal: 输入数学 span=maxhiVal,0-minloVal,0在span中必须有0 十年=10**math.logspan/6.0//math.log10 如果十年=1,则multis=1,1.5,2,3,5,10,否则为1,2,5,10 对于multis中的m: tickSize=m*decade 封面=6.0*1个尺寸; 如果loVal>=0,则leftTick=0;如果hiVal=hiVal,则覆盖:中断 返回leftTick,tickSize def stepShowloVal,hiVal: leftTick,tickSize=stepCalcloVal,hiVal 返回“{:7.3f}{:7.3f}{:7.3f}{:7.3f}{:7.3f}”。formatleftTick,loVal,hiVal,leftTick+6*tickSize,tickSize 尺寸=0.04 对于我在第40段: 打印stepShow0.1*尺寸、1.1*尺寸、stepShow-0.28*尺寸、0.82*尺寸 尺寸*=1.24 上面显示的代码不尝试对称标记的位置。如果您想这样做,您可以在返回leftTick,tickSize之前添加代码,以将leftTick减少tickSize的倍数,而hiVal上方的tickSize比loVal下方的tickSize要多

程序输出:

0.000   0.004   0.044   0.060   0.010    -0.020  -0.011   0.033   0.040   0.010 
0.000   0.005   0.055   0.060   0.010    -0.020  -0.014   0.041   0.040   0.010 
0.000   0.006   0.068   0.120   0.020    -0.020  -0.017   0.050   0.100   0.020 
0.000   0.008   0.084   0.120   0.020    -0.040  -0.021   0.063   0.080   0.020 
0.000   0.009   0.104   0.120   0.020    -0.040  -0.026   0.078   0.080   0.020 
0.000   0.012   0.129   0.300   0.050    -0.050  -0.033   0.096   0.250   0.050 
0.000   0.015   0.160   0.300   0.050    -0.050  -0.041   0.119   0.250   0.050 
0.000   0.018   0.198   0.300   0.050    -0.100  -0.050   0.148   0.200   0.050 
0.000   0.022   0.246   0.300   0.050    -0.100  -0.063   0.183   0.200   0.050 
0.000   0.028   0.305   0.600   0.100    -0.100  -0.078   0.227   0.500   0.100 
0.000   0.034   0.378   0.600   0.100    -0.100  -0.096   0.282   0.500   0.100 
0.000   0.043   0.469   0.600   0.100    -0.200  -0.119   0.350   0.400   0.100 
0.000   0.053   0.581   0.600   0.100    -0.200  -0.148   0.433   0.400   0.100 
0.000   0.066   0.721   1.200   0.200    -0.200  -0.184   0.537   1.000   0.200 
0.000   0.081   0.894   1.200   0.200    -0.400  -0.228   0.666   0.800   0.200 
0.000   0.101   1.109   1.200   0.200    -0.500  -0.282   0.826   2.500   0.500 
0.000   0.125   1.375   3.000   0.500    -0.500  -0.350   1.025   2.500   0.500 
0.000   0.155   1.705   3.000   0.500    -0.500  -0.434   1.271   2.500   0.500 
0.000   0.192   2.114   3.000   0.500    -1.000  -0.538   1.576   2.000   0.500 
0.000   0.238   2.621   3.000   0.500    -1.000  -0.667   1.954   2.000   0.500 
0.000   0.295   3.250   6.000   1.000    -1.000  -0.827   2.423   5.000   1.000 
0.000   0.366   4.030   6.000   1.000    -2.000  -1.026   3.004   4.000   1.000 
0.000   0.454   4.997   6.000   1.000    -2.000  -1.272   3.725   4.000   1.000 
0.000   0.563   6.197   9.000   1.500    -3.000  -1.577   4.619   6.000   1.500 
0.000   0.699   7.684   9.000   1.500    -3.000  -1.956   5.728   6.000   1.500 
0.000   0.866   9.528  12.000   2.000    -4.000  -2.425   7.103   8.000   2.000 
0.000   1.074  11.815  12.000   2.000    -6.000  -3.007   8.807  12.000   3.000 
0.000   1.332  14.650  18.000   3.000    -6.000  -3.729  10.921  12.000   3.000 
0.000   1.651  18.166  30.000   5.000    -5.000  -4.624  13.542  25.000   5.000 
0.000   2.048  22.526  30.000   5.000   -10.000  -5.734  16.792  20.000   5.000 
0.000   2.539  27.932  30.000   5.000   -10.000  -7.110  20.822  50.000  10.000 
0.000   3.149  34.636  60.000  10.000   -10.000  -8.816  25.819  50.000  10.000 
0.000   3.904  42.948  60.000  10.000   -20.000 -10.932  32.016  40.000  10.000 
0.000   4.841  53.256  60.000  10.000   -20.000 -13.556  39.700  40.000  10.000 
0.000   6.003  66.037 120.000  20.000   -20.000 -16.810  49.228 100.000  20.000 
0.000   7.444  81.886 120.000  20.000   -40.000 -20.844  61.043  80.000  20.000 
0.000   9.231 101.539 120.000  20.000   -40.000 -25.846  75.693  80.000  20.000 
0.000  11.446 125.908 300.000  50.000   -50.000 -32.049  93.859 250.000  50.000 
0.000  14.193 156.127 300.000  50.000   -50.000 -39.741 116.385 250.000  50.000 
0.000  17.600 193.597 300.000  50.000   -50.000 -49.279 144.318 250.000  50.000 

刻度值的限制条件是什么?否则,maxvalue-minvalue/7总是返回解决方案……我忘记写了。值0必须始终有一个勾号。如果所有的值都是正的,它可以在底部,如果所有的值都是负的,或者在轴的中间,也必须是合理的。因此,f.e.如果maxValue==90,minValue==10,则最大刻度应为120,步骤==20。步长值不应该像5.232324324 etcif min=-1,max=5,您想要-1,0,1,2,3,4,5,还是应该始终是对称的,比如-6,-4,-2,-2,4,6?其他问题:请精确地指定可接受的刻度间距,可能是1,1.5,2,5,10?我想你总是可以取你的最大值,除以10的某个幂,从可接受的刻度中选择合适的值,然后再乘以之前找到的10的幂。
0.000   0.004   0.044   0.060   0.010    -0.020  -0.011   0.033   0.040   0.010 
0.000   0.005   0.055   0.060   0.010    -0.020  -0.014   0.041   0.040   0.010 
0.000   0.006   0.068   0.120   0.020    -0.020  -0.017   0.050   0.100   0.020 
0.000   0.008   0.084   0.120   0.020    -0.040  -0.021   0.063   0.080   0.020 
0.000   0.009   0.104   0.120   0.020    -0.040  -0.026   0.078   0.080   0.020 
0.000   0.012   0.129   0.300   0.050    -0.050  -0.033   0.096   0.250   0.050 
0.000   0.015   0.160   0.300   0.050    -0.050  -0.041   0.119   0.250   0.050 
0.000   0.018   0.198   0.300   0.050    -0.100  -0.050   0.148   0.200   0.050 
0.000   0.022   0.246   0.300   0.050    -0.100  -0.063   0.183   0.200   0.050 
0.000   0.028   0.305   0.600   0.100    -0.100  -0.078   0.227   0.500   0.100 
0.000   0.034   0.378   0.600   0.100    -0.100  -0.096   0.282   0.500   0.100 
0.000   0.043   0.469   0.600   0.100    -0.200  -0.119   0.350   0.400   0.100 
0.000   0.053   0.581   0.600   0.100    -0.200  -0.148   0.433   0.400   0.100 
0.000   0.066   0.721   1.200   0.200    -0.200  -0.184   0.537   1.000   0.200 
0.000   0.081   0.894   1.200   0.200    -0.400  -0.228   0.666   0.800   0.200 
0.000   0.101   1.109   1.200   0.200    -0.500  -0.282   0.826   2.500   0.500 
0.000   0.125   1.375   3.000   0.500    -0.500  -0.350   1.025   2.500   0.500 
0.000   0.155   1.705   3.000   0.500    -0.500  -0.434   1.271   2.500   0.500 
0.000   0.192   2.114   3.000   0.500    -1.000  -0.538   1.576   2.000   0.500 
0.000   0.238   2.621   3.000   0.500    -1.000  -0.667   1.954   2.000   0.500 
0.000   0.295   3.250   6.000   1.000    -1.000  -0.827   2.423   5.000   1.000 
0.000   0.366   4.030   6.000   1.000    -2.000  -1.026   3.004   4.000   1.000 
0.000   0.454   4.997   6.000   1.000    -2.000  -1.272   3.725   4.000   1.000 
0.000   0.563   6.197   9.000   1.500    -3.000  -1.577   4.619   6.000   1.500 
0.000   0.699   7.684   9.000   1.500    -3.000  -1.956   5.728   6.000   1.500 
0.000   0.866   9.528  12.000   2.000    -4.000  -2.425   7.103   8.000   2.000 
0.000   1.074  11.815  12.000   2.000    -6.000  -3.007   8.807  12.000   3.000 
0.000   1.332  14.650  18.000   3.000    -6.000  -3.729  10.921  12.000   3.000 
0.000   1.651  18.166  30.000   5.000    -5.000  -4.624  13.542  25.000   5.000 
0.000   2.048  22.526  30.000   5.000   -10.000  -5.734  16.792  20.000   5.000 
0.000   2.539  27.932  30.000   5.000   -10.000  -7.110  20.822  50.000  10.000 
0.000   3.149  34.636  60.000  10.000   -10.000  -8.816  25.819  50.000  10.000 
0.000   3.904  42.948  60.000  10.000   -20.000 -10.932  32.016  40.000  10.000 
0.000   4.841  53.256  60.000  10.000   -20.000 -13.556  39.700  40.000  10.000 
0.000   6.003  66.037 120.000  20.000   -20.000 -16.810  49.228 100.000  20.000 
0.000   7.444  81.886 120.000  20.000   -40.000 -20.844  61.043  80.000  20.000 
0.000   9.231 101.539 120.000  20.000   -40.000 -25.846  75.693  80.000  20.000 
0.000  11.446 125.908 300.000  50.000   -50.000 -32.049  93.859 250.000  50.000 
0.000  14.193 156.127 300.000  50.000   -50.000 -39.741 116.385 250.000  50.000 
0.000  17.600 193.597 300.000  50.000   -50.000 -49.279 144.318 250.000  50.000