2010-01-13 241 views

回答

2

你想要做的縮放類型不能由MSChart自動完成。一旦您從用戶那裏檢索到「放大」X值範圍,您需要編寫更多的代碼來適當地重置Y軸縮放。

如果您使用的是線型數據系列,並且該系列的源數據以SortedList形式存儲,則此功能最容易使用。

Dim firstXindex as Int32 = myDataSeries.IndexOfKey(firstXzoomValue) 
Dim lastXindex as Int32 = myDataSeries.IndexOfKey(lastXzoomValue)  

Dim minY as Double = 1.7E+308 
Dim maxY as Double = -1.7E+308 


For i = firstXindex To lastXindex 
    If myDataSeries.GetByIndex(i) > maxY Then 
     maxY = myDataSeries.GetByIndex(i) 
    End If 
    If myDataSeries.GetByIndex(i) < minY Then 
     minY = myDataSeries.GetByIndex(i) 
    End If 
Next 

一旦你使用像上面的代碼的東西,讓您MINY與美星,那麼你可以使用這些值來最小和最大Y軸值重置的ChartArea:

With myChartArea 
    .AxisY.Maximum = maxY 
    .AxisY.Minimum = minY 
End With 
0

微軟已經提供下載一whole range of samples。在示例應用程序中有一個名爲Scrollable Appearance,它似乎可以做你想做的事。

Scrollable Appearance http://img502.imageshack.us/img502/5172/zoomablechart.png

用戶可以選擇和圖形的面積,它會放大,也可以左右移動使用滾動條。

C#示例代碼包含在下載中。

+1

這不會根據用戶選擇的X值範圍自動放大適當的Y值範圍 – ChrisAU 2010-02-18 02:34:32

3

我一直在尋找解決方案。我發現這很有用。訂閱AxisValueChanged事件並使用ScaleView修改視圖。

private void chart1_AxisViewChanged(object sender, ViewEventArgs e) 
    { 
     if (e.Axis.AxisName == AxisName.X) 
     { 
      int start = (int)e.Axis.ScaleView.ViewMinimum; 
      int end = (int)e.Axis.ScaleView.ViewMaximum; 

      double[] temp = chart1.Series[0].Points.Where((x, i) => i >= start && i <= end).Select(x => x.YValues[0]).ToArray(); 
      double ymin = temp.Min(); 
      double ymax = temp.Max(); 

      chart1.ChartAreas[0].AxisY.ScaleView.Position = ymin; 
      chart1.ChartAreas[0].AxisY.ScaleView.Size = ymax - ymin; 
     } 
    }