C# 图表轴的步长计算
我需要计算图表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,25C# 图表轴的步长计算,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实现的。如果你精通这两种语言,它的大部
非常感谢您的帮助:下面所示的实现是用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