轴标签值是动态生成的,但需要显示特定标签

时间:2014-07-10 14:27:59

标签: asp.net vb.net mschart axis-labels

我正在尝试动态生成轴标签值,如下所示。

Dim dt As DataTable
dt = ds.Tables(0)

Dim y2max As Double = dt.Compute("max(return)", String.Empty) + 0.001
Dim y2min As Double = dt.Compute("min(return)", String.Empty) - 0.001
Dim ymax As Double = dt.Compute("max(TC_" & TC & ")", String.Empty) + 0.005
Dim ymin As Double = dt.Compute("min(TC_" & TC & ")", String.Empty) - 0.005

并生成以下图表。

http://i.imgur.com/LrfsvDT.png

我能够通过这种方法实现所需的缩放,但是我希望PRIMARY Y标签值具有" 1"。我可以设置适当的间隔或格式化Y标签值来实现此目的。 这是我希望实现的目标

http://i.imgur.com/HKCrLmw.png

我不关心间隔值/长度,但我需要我的蓝线系列以1开头。

1 个答案:

答案 0 :(得分:0)

错误答案:我认为您正在寻找AxisY.IntervalOffset属性。为什么会出错?因为它会改变标签。它恰好在我之前的尝试中看起来

正确的答案:如果将AxisY.Crossing属性设置为1,则会强制它使用1作为标签值,并适当地计算其他标签。然后,您需要设置AxisY.IsStartedFromZero = False以避免零被包含在轴上,AxisX.IsMarksNextToAxis = False以使x轴标签出现在图表的下边缘。

因此...

Sub GenerateChart()
    Chart1.Legends.Clear()
    Chart1.Series.Clear()

    ' generate some sample data
    Dim s1 As New Series
    For i = 0 To 180 Step 2
        s1.Points.AddXY(i, Math.Sin(Math.PI * i / 60) * 0.004 + 1)
    Next

    Chart1.Series.Add(s1)
    Chart1.Series(0).ChartType = SeriesChartType.Line
    Chart1.Series(0).BorderWidth = 2

    Chart1.ChartAreas(0).AxisY.IsStartedFromZero = False
    Chart1.ChartAreas(0).AxisY.Crossing = 1
    Chart1.ChartAreas(0).AxisX.IsMarksNextToAxis = False

    ' avoid the label "1.000" being formatted as "1"
    Dim labelFormat = "0.000"
    Chart1.ChartAreas(0).AxisY.LabelStyle = New LabelStyle With {.Format = labelFormat}

End Sub

给出

chart