识别yAxis滴答间隔

时间:2016-03-01 09:54:47

标签: highcharts

我使用highcharts来显示各个部门的每季度总收入(数千英镑)。

有时部门的收入很小。在这种情况下,y轴值包含2个小数位

有时收入较大且y轴值包含1个小数位

偶尔,值非常大,y轴值不包含任何小数位

Fiddle to demonstrate different formatting

我遇到的问题是y轴的当前格式看起来不对。

我需要根据刻度间隔设置y轴值的小数位数: - 小值(即0.25,0.5,0.75,1等)需要格式化为2位小数。 较大的值(即0.5,1,1.5,2等)需要格式化为1位小数。 非常大的值(即80,90,100,110等)不需要小数位。

实际值最多可达3位小数(例如0.306,0.518(小)1.429,1.806(大)102.429,160.806(非常大))

我的代码构建了一个脚本字符串,然后使用ScriptManager.RegisterStartupScript来运行脚本。

我试图根据值

设置小数位数
Dim yAxisValue as Double= 0
Dim numberOfDP as Integer = 0
...
While reader.Read
    If yAxisValue < reader.Item("YAxisValues").ToString Then
        yAxisValue = reader.Item("YAxisValues").ToString
        If Val(yAxisValue) < 1 Then
          numberOfDP = 2
        ElseIf Val(yAxisValue) < 10 Then
          numberOfDP = 1
        End If
    End If
End While

MyScript = MyScript & "yAxis: {" & vbCrLf
MyScript = MyScript & "labels: {" & vbCrLf
MyScript = MyScript & "style: {color: 'black'," & vbCrLf
MyScript = MyScript & "'fontSize': '11pt'}," & vbCrLf
MyScript = MyScript & "format: '{value:. & numberOfDP & f}'" & vbCrLf
MyScript = MyScript & "}" & vbCrLf
MyScript = MyScript & "}" & vbCrLf

但我宁愿将格式基于实际的滴答间隔。

我有什么方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

我不确定ScriptManager.RegisterStartupScript,但在Highcharts中,您可以设置yAxis.labels.formatter并确定应显示多少小数,例如:

function formatter () {
  var dec = this.axis.tickInterval > 1 ? 0 : (this.axis.tickInterval > 0.1 ? 1 : 2);
  return this.value.toFixed(dec);
}

现在只需在yAxis选项中使用:

yAxis: {
  labels: {
    formatter: formatter
  }
},

为您提供实时演示:https://jsfiddle.net/4y8n33ob/