使用ZedGraph製作動態更新的統計圖

來源:互聯網
上載者:User

ZedGraph是很好的.net下的統計圖開源項目,在以前的一篇隨筆中提到,與其他的一些統計圖控制項相比,ZedGraph由於是直接在畫布上作畫,而不是產生圖片顯示,所以效能比較好,在諸如股市的即時走勢圖,顯示cpu使用率等即時性較強的應用中有很好的表現,方法並不難,但是由於很少有人寫這方面的文章,又正巧在其他論壇中看到有這方面的問題,所以寫了下面的例子。

ZedGraph在描畫折線圖的時候,將所有的座標點都儲存在PointPairList中,在畫線的時候以這個為X,Y座標。要作動態折線圖,實際上就是不斷在這個PointPairList中添加點座標,然後重新整理就可以了。

代碼很簡單:

Random ran = new Random();

PointPairList list = new PointPairList();

LineItem myCurve ;

Random用來產生樣本資料,也就是Y座標,PointPairList用來存放點集合。myCarve就是要畫的線了。當然,不能忘了在表單上添加zedGraph的控制項。

為了突出效果,我們在Form的Load事件中加上下面的代碼:

this.zedGraphControl1.GraphPane.Title.Text = "動態折線圖";

this.zedGraphControl1.GraphPane.XAxis.Title.Text = "時間";

this.zedGraphControl1.GraphPane.YAxis.Title.Text = "數量";

this.zedGraphControl1.GraphPane.XAxis.Type = ZedGraph.AxisType.DateAsOrdinal;

for (int i = 0; i <= 100; i++)

{

double x = (double)new XDate(DateTime.Now.AddSeconds(-(100 - i)));

double y = ran.NextDouble();

list.Add(x, y);

}

DateTime dt = DateTime.Now;

myCurve = zedGraphControl1.GraphPane.AddCurve("My Curve",

list, Color.DarkGreen, SymbolType.None);

this.zedGraphControl1.AxisChange();

this.zedGraphControl1.Refresh();

這樣,表單載入後就可以看到已經畫出了一條折線圖。可能象下面的樣子:

但是現在,這條線現在還不會動,為了讓它動起來就要定時給PointPairList中添加座標。

添加一個Timer控制項,設定Interval屬性為1000,然後在Timer的Tick事件中添加代碼:

zedGraphControl1.GraphPane.XAxis.Scale.MaxAuto = true;

double x = (double)new XDate(DateTime.Now);

double y = ran.NextDouble();

list.Add(x, y);

this.zedGraphControl1.AxisChange();

this.zedGraphControl1.Refresh();

運行,就會看到線條動起來了。

如果要在折線圖內顯示指定數量的點,只需要在添加座標之前把第一個座標點去掉:

if (list.Count >= 100)

{

list.RemoveAt(0);

}

如果要象windows工作管理員中的cpu使用率那樣,剛開始的時候是空的,隨著時間的推移才逐漸畫滿,可以在初始化的時候填幾個Y座標為0的點:

for (int i = 0; i <= 100; i++)

{

double x = (double)new XDate(DateTime.Now.AddSeconds(-(100 - i)));

double y = 0;

list.Add(x, y);

}

實際上,代碼是比較簡單的,關鍵就在於效能,在上面的代碼中,在產生折線的時候使用的是SymbolType.None,如果使用其他幾種,折點可以表示為方型,星形等圖形,效能就要下降很多,例如,按照上面的代碼,在我windows2000 專業版,賽揚1.7G,512記憶體的條件下,可以顯示10000個點,而且沒有明顯的停頓現象,但是如果將折點的圖形設定為SymbolType.Diamond,例如這樣:


在10000個點的情況下停頓現象非常嚴重,實際上,不到2000個點就已經有明顯的感覺了。同時在描線的時候沒有使用消除鋸齒,一樣可以提高效能,不過,對效能的提升還是很有限的。

如果以股市即時走勢圖為例,每天4個小時,如果每10秒更新一次,6×60×4=1440,可以看出ZedGraph完全可以適用。

原文:http://www.cnblogs.com/dahuzizyd/archive/2007/01/16/zedgraph_dynamic_line_chart.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.