2014-07-10 39 views
0

我試圖動態生成軸標籤值,如下所示。軸標籤值是動態生成的,但需要顯示特定的標籤

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

我能夠達到預期的結垢用這種方法,但是我想通過一次Y標籤值有「1」。我可以設置適當的間隔或格式Y標籤值來實現此目的。 這是我希望達到的

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

我不關心的區間值/長度,不過,我需要我的藍線系列開始與1

回答

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

+0

感謝您的明確的解釋@andrew。 IntervalOffset適合於此目的,但在我的情況下,Y標籤軸是動態生成的,因此偏移值無法修復。它也需要動態。 – user3715501

+0

@ user3715501您可以自己計算IntervalOffset - 它不一定是固定金額。 –

+0

@ user3715501我必須爲我以前的嘗試道歉:經過更多調查後,結果證明是錯誤的,或者最多是錯誤的。我認爲我的新嘗試是正確的答案 - 我給它更廣泛的測試。 –