2011-05-19 74 views
3

我目前正在構建一個可以繪製流數據的應用程序。我可以很好地接收和添加數據點到圖表中,但是在添加了每個點之後,圖形會自動更改其規模以包含所有數據點(即,隨着添加的點數越多,點越接近)。我該如何解決這個問題?.Net圖表控制自動滾動/禁用自動比例

理想情況下,我希望圖表沿着x軸簡單地滾動,而不是每次添加點時都要設置縮放比例。做這個的最好方式是什麼?

這裏是我的代碼用於添加一個數據點作爲數據到達串行端口:

chart1.Series["Series1"].Points.AddY(parsed); 

該圖僅僅是一個默認的快速線圖。這裏是圖形繪製數據隨着時間的屏幕截圖。正如您所看到的,它只是隨着時間的推移壓縮圖表,而不僅僅是單獨放置標尺並向右滾動。 After a few seconds After a few more seconds

+0

您是否找到該儀表的解決方案? – 2013-12-30 13:38:30

回答

0

這將禁用自動縮放:

編輯是增加了在每個定時器點打勾的最小和模擬:

chart1.ChartAreas[0].AxisY.ScaleBreakStyle.Enabled = false; 
chart1.ChartAreas[0].AxisY.Maximum = 0.3; 
chart1.ChartAreas[0].AxisY.Minimum = -0.3; 
+0

這不起作用。問題是在x軸上進行壓縮。我找到了一個解決方案,但我認爲它不是那麼優雅。隨着數據點被添加到圖表中,計算x軸最大值和最小值之間的差值,並且如果它高於某個值,最小值會遞增,從而滾動圖表。 '如果((chart1.ChartAreas [0] .AxisX.Maximum - chart1.ChartAreas [0] .AxisX.Minimum)> 20) { chart1.ChartAreas [0] .AxisX.Minimum ++; }' – isometrik 2011-06-22 16:42:11

0

Iv'e以下方式做到了這一點最大值會遞增,所以顯示的部分會增加,因此會出現滾動效果。

private void mockTimerTick(object sender, EventArgs e) 
{ 
     int i; 

     if (isRunning) 
      return; 

     lock (_syncObj) 
     { 
      isRunning = true; 
      for (i = currentOffset; i < samplesPerSegment + currentOffset; i++) 
      { 
       _series.Points.AddXY(mockPoints[i].X, mockPoints[i].Y); 

       if (i >= _chart.ChartAreas["ChartArea1"].AxisX.Maximum) 
       { 
        _chart.ChartAreas["ChartArea1"].AxisX.Maximum++; 
        _chart.ChartAreas["ChartArea1"].AxisX.Minimum++; 
        _chart.ChartAreas["ChartArea1"].AxisX.ScaleView.Scroll(_chart.ChartAreas["ChartArea1"].AxisX.Maximum); 

       }    
      } 
      isRunning = false; 
     } 

     currentOffset = i; 
}