Mindfusion教程:WinForms中的實時圖表

下載Mindfusion最新版本

在此示例中,我們將構建一個實時讀取其數據並每秒更新一次的折線圖。

Mindfusion

我們首先創建一個空的WinForms項目。我們假設您已經安裝了Charting for WinForms組件,您可以在VisualStudio工具箱中看到包含圖表組件的列表。

拖動LineChart控件並將其放在窗體上。您現在應該看到對您需要自動添加到項目中的三個庫的引用:

  • MindFusion.Charting;

  • MindFusion.Charting.WinForms;

  • MindFusion.Common;

1.系列和數據

我們的圖表將在X軸上繪製時間戳。這就是我們選擇DateTimeSeries類來創建圖表系列的原因。構造函數需要兩個列表 - 一個具有DateTime值,另一個具有double值。它們分別爲X軸和Y軸提供數據。我們還必須提供另外兩個參數:一個用於開始,一個用於時間段結束。

List<DateTime> dates = new List<DateTime>();
List<double> values = new List<double>();

爲了模仿實時功能,我們將使用計時器。我們的計時器每秒會產生一個隨機數。一開始我們將有一個沒有值的列表。漸漸地,我們將填充值,一旦達到100,我們將開始刪除第一個值並在數組末尾添加新值。

這就是我們初始化計時器的方式:

Random ran;
ran = new Random();         
        
Timer dataTimer = new Timer();
dataTimer.Tick += new EventHandler(GenerateData);
dataTimer.Interval = 1000;
dataTimer.Start();

我們來看看GenerateData方法:

private void GenerateData(object sender, EventArgs e)
    {
         dates.Add(DateTime.Now);
         values.Add(2 + ran.NextDouble() * 8.0);

         if (dates.Count > 100)
         {
             dates.RemoveAt(0);
             values.RemoveAt(0);
         }
...
}

我們總是添加當前的DateTime。由於計時器每秒都會滴答,這正是我們想要的。一旦值爲100,我們就開始刪除列表開頭的值。

現在讓我們創建DateTime系列。它需要週期開始和結束的參數。我們總是將第一個和最後一個DateTime值分配爲此係列的DateTime數據的邊界:

DateTimeSeries series = new DateTimeSeries(dates, values, dates[0], dates[dates.Count-1]);

然後我們看看我們是否已經添加了一個系列,如果是的話 - 替換它。如果沒有添加系列 - 添加新系列:

if (lineChart1.Series.Count > 0)
       lineChart1.Series[0] = series;
else
       lineChart1.Series.Add(series);

默認情況下,DateTimeSeries從X軸渲染其值 - DateTime實例作爲X軸的標籤。我們可以使用DateTimeFormat屬性自定義它們的外觀。預定義的DateTimeFormat成員沒有選項,其中值作爲時間戳呈現爲“14:23:34”。因此,我們選擇DateTimeFormat “CustomDateTime”並使用CustomDateTime指定格式:

series.DateTimeFormat = DateTimeFormat.CustomDateTime;
series.CustomDateTimeFormat = "H:mm:ss";

2. X軸

我們希望每個時刻只能看到最後10個值。應該渲染其他90或者它們,但是用戶必須滾動才能看到它們。我們使用DateTimeSeries的MinValue和MaxValue屬性實現:


series.MinValue = 0;
series.MaxValue = 0.1 * dates.Count;

爲了只渲染最後10個系列,我們使用XAxis屬性 - MaxValue和MinValue一旦DateTimeSeries 的MaxValue大於1,這意味着至少添加了10個值,我們調整了值的可見範圍。 X軸,只有最後10個可見:

if (series.MaxValue > 1)
  {
      lineChart1.XAxis.MaxValue = series.MaxValue;
      lineChart1.XAxis.MinValue = series.MaxValue - 1.0;
  }

我們還爲此軸設置了title:

lineChart1.XAxis.Title = "Time";

讓我們使用ShowXCoordinates屬性隱藏在DateTime標記頂部渲染的數值:

lineChart1.ShowXCoordinates = false;

3.Y軸


lineChart1.YAxis.MinValue = 0;
lineChart1.YAxis.MaxValue = 20;
lineChart1.YAxis.Interval = 2;

我們還更改了軸標題,我們使用NumberFormat屬性來渲染具有浮點的間隔:

lineChart1.YAxis.Title = "Visitors (in thousands)";
lineChart1.YAxis.NumberFormat = "N";

4.Grid

讓我們渲染垂直網格條紋。我們希望它們是虛線和淺灰色。我們使用GridType GridColor和GridLineStyle來自定義網格:

lineChart1.GridType = GridType.Vertical;
lineChart1.Theme.GridLineStyle = System.Drawing.Drawing2D.DashStyle.Dash;
lineChart1.Theme.GridLineColor = Color.FromArgb(192, 192, 192);

請注意,GridColor和GridLineStyle是LineChart的Theme屬性的屬性,添加一個額外的 - 當用戶沿軸滾動圖表時停止網格條紋移動:

lineChart1.PinGrid = true;

5.圖例

圖例從Series的Title屬性中獲取其標籤。在我們的例子中我們設置:

series.Title = "Server Requests";

我們想要更改圖例背景以使圖例更容易被發現:

lineChart1

我們使用半透明畫筆,當用戶將圖例移動到另一個圖表元素時,可以看到圖表細節。

6.線條顏色

我們想要用紅色渲染線條。我們選擇MixedSeriesStyle類作爲我們應用程序的樣式類。您可以使用適合您的任何其他* SeriesStyle類:

// assign a reb brush for the series
lineChart1.Plot.SeriesStyle = new MixedSeriesStyle()
    {  
         UniformStrokeThickness = 5,
         UniformStroke = new MindFusion.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章