做視頻資源網(wǎng)站有哪些內(nèi)容線上推廣宣傳方式有哪些
文章目錄
- 一、ZedGraph介紹
- ZedGraph的特點(diǎn)
- ZedGraph的缺點(diǎn)
- 使用注意事項(xiàng)
- 二、ZedGraph官網(wǎng)
- 三、ZedGraph的應(yīng)用
- 四、ZedGraph的高端應(yīng)用
- 五、、總結(jié)
一、ZedGraph介紹
ZedGraph 是一個(gè)用于繪制圖表和圖形的開源.NET圖表庫(kù)。它提供了豐富的功能和靈活性,可以用于創(chuàng)建各種類型的圖表,包括折線圖、柱狀圖、餅圖等。ZedGraph 支持多種數(shù)據(jù)源,包括數(shù)組、數(shù)據(jù)表和實(shí)時(shí)數(shù)據(jù)流,同時(shí)還提供了豐富的定制選項(xiàng),使用戶能夠輕松地定制圖表的外觀和行為。這個(gè)庫(kù)在.NET開發(fā)中被廣泛應(yīng)用于數(shù)據(jù)可視化和報(bào)表生成等領(lǐng)域。
ZedGraph.dll的源碼庫(kù)代碼:
ZedGraph的特點(diǎn)
- 可以先生成圖片后再顯示,這對(duì)一些多用戶并發(fā)有點(diǎn)幫助。(RenderMode.ImageTag)
- 可以動(dòng)態(tài)生成,不用保存文件,可以減少IO的讀寫消耗。(RenderMode.RawImage)
- 比較多的呈現(xiàn)方式,比如曲線圖、柱狀圖、餅圖等。
ZedGraph的缺點(diǎn)
- 編碼的時(shí)候,在設(shè)置屬性不方便,一點(diǎn)注釋都沒(méi)有,不要說(shuō)是中文的啦,就連英文都沒(méi)有,太不方便了。
- 圖表的顯示比較簡(jiǎn)陋,沒(méi)有OpenFlashChar來(lái)得好看。
使用注意事項(xiàng)
- dll文件當(dāng)前的最新版本是5.1.5,我以前也使用過(guò)4.3.4的版本,這兩個(gè)版本的差別很大,很多屬性都已經(jīng)不存在了,面向?qū)ο蟮母心羁赡芗訌?qiáng)了不少,也清晰了不少,因?yàn)楝F(xiàn)在的屬性設(shè)置都是先實(shí)體,再屬性了,而以前就比較混亂了。所以在使用不同的版本的時(shí)候要注意這點(diǎn)。
- 在Windows Forms和 ASP.Net Web Form項(xiàng)目中使用是不同。
二、ZedGraph官網(wǎng)
https://sourceforge.net/projects/zedgraph/files/
官網(wǎng)中可以看到ZedGraph的介紹,在文件列可以下載dll文件和使用例子。都是.NET平臺(tái)下C#語(yǔ)言的,可以在VisualStudio中查看代碼,以及運(yùn)行代碼
三、ZedGraph的應(yīng)用
1、新建WinForm項(xiàng)目。
2、在官網(wǎng)中下載ZedGraph.dll庫(kù)文件,在項(xiàng)目中引用,并添加命名空間。
3、工具箱中添加ZedGraph控件。
4、在Form1中拖入一個(gè)ZedGraphControl控件,修改name屬性為myZedgraph。
5、項(xiàng)目中的代碼如下:
這是一個(gè)簡(jiǎn)單的 Windows 窗體應(yīng)用程序,使用 ZedGraph 庫(kù)來(lái)繪制速度隨時(shí)間變化的曲線圖。關(guān)鍵步驟如下:
1). 初始化圖表控件 (InitZedGraph 方法):
- 在 InitZedGraph方法中,首先獲取 GraphPane對(duì)象,然后設(shè)置圖表的標(biāo)題、X軸和Y軸的標(biāo)題。
- 接著使用 PointPairList對(duì)象 vlist存儲(chǔ)時(shí)間和速度的數(shù)據(jù)點(diǎn)。
- 使用 AddCurve方法創(chuàng)建一條紅色的菱形樣式曲線,并將數(shù)據(jù)點(diǎn) vlist綁定到曲線上。
- 設(shè)置了一些圖表的顯示樣式,如網(wǎng)格線、刻度顏色、背景顏色等。
- 最后調(diào)用 AxisChange 方法刷新軸。
2). 定時(shí)器刷新曲線 (ChartTimer_Tick 方法):
- 在 ChartTimer_Tick方法中,通過(guò)定時(shí)器每隔一定時(shí)間觸發(fā),模擬生成隨機(jī)速度數(shù)據(jù),并將新的數(shù)據(jù)點(diǎn)添加到 vlist 中。
- 每次添加新數(shù)據(jù)后,更新時(shí)間 time 的值,并調(diào)用 AxisChange 方法和 Refresh方法刷新曲線。
3). Form1 構(gòu)造函數(shù):
- 在構(gòu)造函數(shù)中,初始化 ZedGraph 控件并啟動(dòng)定時(shí)器,每隔一定時(shí)間刷新曲線。
4). Form1_Load 方法:
- 在 Form1_Load 方法中,彈出一個(gè)消息框顯示 “Hello world!”。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ZedGraph;namespace WindowsFormsApp1
{public partial class Form1 : Form{//定時(shí)器刷新曲線Timer ChartTimer;//時(shí)間int time = 30;//記錄曲線值PointPairList vlist = new PointPairList();public Form1(){InitializeComponent();//初始化ZedGraphInitZedGraph();ChartTimer = new Timer(){Interval = 300,};ChartTimer.Tick += ChartTimer_Tick;ChartTimer.Start();}private void Form1_Load(object sender, EventArgs e){MessageBox.Show("Hello world!");}#region 初始化圖表控件private void InitZedGraph(){GraphPane myPane = myZedGraph.GraphPane;myPane.IsAlignGrids = true;myPane.Title.Text = "測(cè)試速度";myPane.XAxis.Title.Text = "時(shí)間";myPane.YAxis.Title.Text = "速度";for (int i = 0; i < 30; i++){double time = (double)i;double acceleration = 2.0;double velocity = acceleration * time;vlist.Add(time, velocity);}//生成一條紅色的菱形樣式曲線,將曲線和值vlist綁定//生成速度圖例LineItem myCurve = myPane.AddCurve("速度", vlist, Color.Red, SymbolType.Diamond);//填充白色myCurve.Symbol.Fill = new Fill(Color.White);//顯示X的網(wǎng)格線myPane.XAxis.MajorGrid.IsVisible = true;//設(shè)置Y軸刻度為紅色myPane.YAxis.Scale.FontSpec.FontColor = Color.Red;myPane.YAxis.Title.FontSpec.FontColor = Color.Red;//隱藏Y軸對(duì)面的刻度顯示myPane.YAxis.MajorTic.IsOpposite = false;myPane.YAxis.MinorTic.IsOpposite = false;// 不顯示Y軸的0刻度線myPane.YAxis.MajorGrid.IsZeroLine = false;myPane.YAxis.MajorGrid.IsVisible = true;myPane.YAxis.MajorGrid.Color = Color.Red;//設(shè)置刻度范圍myPane.YAxis.Scale.Align = AlignP.Inside;myPane.YAxis.Scale.Max = 100;myPane.YAxis.Scale.MaxAuto = true;//設(shè)置chart的背景顏色myPane.Chart.Fill = new Fill(Color.White, Color.LightGoldenrodYellow, 45.0f);//刷新軸myZedGraph.AxisChange();}#endregion/// <summary>/// 刷新曲線/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void ChartTimer_Tick(object sender, EventArgs e){//隨機(jī)數(shù)據(jù)模擬Random random = new Random();double v = random.Next(30, 60);//添加新的數(shù)據(jù)vlist.Add(time, v);time += 2;//曲線刷新myZedGraph.AxisChange();myZedGraph.Refresh();}}
}
運(yùn)行結(jié)果,動(dòng)態(tài)增加點(diǎn):
數(shù)據(jù)點(diǎn)和線等屬性可以調(diào)整:
6、需求升級(jí)
客戶不想看到這么多數(shù)據(jù),只想看到最新的前三十條數(shù)據(jù)怎么做呢?
方法1 判斷數(shù)據(jù)是否超過(guò)30,大于30之后每添加新的數(shù)據(jù)就把最前面的一個(gè)數(shù)據(jù)移除掉
方法2 不需要移除數(shù)據(jù),更新X軸的范圍,讓其只繪制前面30個(gè)數(shù)據(jù)。這個(gè)方法需要知道30個(gè)數(shù)據(jù)X軸的具體值是多少。
方法1:修改定時(shí)器刷新函數(shù)ChartTimer_Tick(object sender, EventArgs e)
1). 隨機(jī)數(shù)據(jù)模擬:
- 首先通過(guò) Random 類生成一個(gè)隨機(jī)速度值 v ,范圍在 30 到 60 之間。
2). 添加新的數(shù)據(jù):
- 使用 vlist.Add(time, v) 將新的數(shù)據(jù)點(diǎn)添加到 vlist 中,其中 time 是時(shí)間值,每個(gè)點(diǎn)的時(shí)間間隔為 2。
3). 保留最新的 30 個(gè)數(shù)據(jù):
- 在 if (vlist.Count > 30) 的條件判斷中,當(dāng)數(shù)據(jù)點(diǎn)數(shù)量超過(guò) 30 個(gè)時(shí),通過(guò) vlist.RemoveAt(0) 移除最早的數(shù)據(jù)點(diǎn),以保持?jǐn)?shù)據(jù)點(diǎn)數(shù)量為最新的 30 個(gè)。
4). 曲線刷新:
- 最后調(diào)用 AxisChange 方法和 Refresh 方法刷新曲線,確保新的數(shù)據(jù)點(diǎn)能夠正確顯示在圖表中。
這段代碼實(shí)現(xiàn)了在不斷更新數(shù)據(jù)點(diǎn)的同時(shí)保留最新的 30 個(gè)數(shù)據(jù)點(diǎn),確保圖表中顯示的數(shù)據(jù)點(diǎn)數(shù)量不會(huì)無(wú)限增長(zhǎng)。這樣可以有效管理數(shù)據(jù)點(diǎn)的數(shù)量,避免數(shù)據(jù)量過(guò)大導(dǎo)致圖表顯示效果不佳。
/// <summary>/// 刷新曲線/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void ChartTimer_Tick(object sender, EventArgs e){//隨機(jī)數(shù)據(jù)模擬Random random = new Random();double v = random.Next(30, 60);//添加新的數(shù)據(jù)vlist.Add(time, v);time += 2;#region 方法1if (vlist.Count > 30){// 保留最新的30個(gè)數(shù)據(jù)vlist.RemoveAt(0);}#endregion//曲線刷新myZedGraph.AxisChange();myZedGraph.Refresh();}
結(jié)果如下:可以看到數(shù)據(jù)量一直保持在30個(gè),前面的數(shù)據(jù)會(huì)被移除掉。
方法2:
1). 隨機(jī)數(shù)據(jù)模擬:
- 首先通過(guò) Random 類生成一個(gè)隨機(jī)速度值 v ,范圍在 30 到 60 之間。
2). 添加新的數(shù)據(jù):
- 使用 vlist.Add(time, v) 將新的數(shù)據(jù)點(diǎn)添加到 vlist 中,其中 time 是時(shí)間值,每個(gè)點(diǎn)的時(shí)間間隔為 2。
3). 更新數(shù)據(jù)點(diǎn)的時(shí)間間隔:
- 每次添加新數(shù)據(jù)后,更新時(shí)間 time 的值,確保每個(gè)數(shù)據(jù)點(diǎn)的時(shí)間間隔為 2。
4). 方法1 (注釋部分):
- 這部分代碼是一種方法來(lái)保留最新的 30 個(gè)數(shù)據(jù)點(diǎn),當(dāng)數(shù)據(jù)點(diǎn)數(shù)量超過(guò) 30 個(gè)時(shí),移除最早的數(shù)據(jù)點(diǎn)。
5). 方法2:
- 這部分代碼是另一種方法來(lái)限制數(shù)據(jù)點(diǎn)數(shù)量為 30 個(gè),并更新X軸的顯示范圍。
- 當(dāng)數(shù)據(jù)點(diǎn)數(shù)量達(dá)到或超過(guò) 30 個(gè)時(shí),設(shè)置X軸的最大值為當(dāng)前時(shí)間 time ,并根據(jù)每個(gè)點(diǎn)的時(shí)間間隔計(jì)算出X軸的最小值,以確保只顯示最新的 30 個(gè)數(shù)據(jù)點(diǎn)。
6). 曲線刷新:
- 最后調(diào)用 AxisChange 方法和 Refresh 方法刷新曲線,確保新的數(shù)據(jù)點(diǎn)能夠正確顯示在圖表中。
這段代碼實(shí)現(xiàn)了在不斷更新數(shù)據(jù)點(diǎn)的同時(shí)限制數(shù)據(jù)點(diǎn)數(shù)量為最新的 30 個(gè),并根據(jù)數(shù)據(jù)點(diǎn)的時(shí)間間隔更新X軸的顯示范圍。這樣可以保持圖表中顯示的數(shù)據(jù)點(diǎn)為最新的數(shù)據(jù),同時(shí)避免數(shù)據(jù)點(diǎn)數(shù)量過(guò)多導(dǎo)致圖表混亂。
/// <summary>/// 刷新曲線/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void ChartTimer_Tick(object sender, EventArgs e){//隨機(jī)數(shù)據(jù)模擬Random random = new Random();double v = random.Next(30, 60);//添加新的數(shù)據(jù)vlist.Add(time, v);//每個(gè)點(diǎn)的時(shí)間間隔time += 2;#region 方法1//if (vlist.Count > 30)//{// 保留最新的30個(gè)數(shù)據(jù)// vlist.RemoveAt(0);//}#endregion#region 方法2if (vlist.Count >= 30){//更新X軸的顯示范圍myZedGraph.GraphPane.XAxis.Scale.Max = time;//每個(gè)點(diǎn)的時(shí)間間隔myZedGraph.GraphPane.XAxis.Scale.Min = time - (30 * 2);}#endregion//曲線刷新myZedGraph.AxisChange();myZedGraph.Refresh();}
運(yùn)行如下:這個(gè)效果就看著比較連續(xù),沒(méi)有太多空曠的地方
四、ZedGraph的高端應(yīng)用
ZedGraph的圖表種類、屬性很多,可以搜索相關(guān)實(shí)際高端應(yīng)用,學(xué)習(xí)一下這個(gè)控件的強(qiáng)大功能的使用場(chǎng)景。
五、、總結(jié)
這篇文章是關(guān)于 ZedGraph 圖表庫(kù)的介紹和應(yīng)用指南。文章主要包括以下內(nèi)容:
-
ZedGraph介紹:介紹了 ZedGraph 是一個(gè)用于繪制圖表和圖形的開源.NET圖表庫(kù),具有豐富的功能和靈活性,適用于各種類型的圖表,如折線圖、柱狀圖、餅圖等。同時(shí)列出了 ZedGraph 的特點(diǎn)和缺點(diǎn),并提到了在不同版本之間的差異。
-
ZedGraph官網(wǎng):提供了 ZedGraph 的官方網(wǎng)址,用戶可以在該網(wǎng)站上找到庫(kù)文件的下載和使用示例。
-
ZedGraph的應(yīng)用:詳細(xì)介紹了如何在 WinForm 項(xiàng)目中使用 ZedGraph 庫(kù),包括下載庫(kù)文件、引用和添加控件等步驟。同時(shí)給出了示例代碼,展示了如何在 Windows 窗體應(yīng)用程序中繪制速度隨時(shí)間變化的曲線圖。
-
需求升級(jí):針對(duì)客戶需求升級(jí),只展示最新的前三十條數(shù)據(jù),提供了兩種方法來(lái)實(shí)現(xiàn)這一需求。方法一是保留最新的 30 個(gè)數(shù)據(jù)點(diǎn),方法二是更新X軸的顯示范圍,只繪制前面 30 個(gè)數(shù)據(jù)點(diǎn)。提供了相應(yīng)的代碼和運(yùn)行結(jié)果展示。
-
總結(jié):文章對(duì)整個(gè)內(nèi)容進(jìn)行了總結(jié),概括了 ZedGraph 的特點(diǎn)、官網(wǎng)地址、應(yīng)用方法以及需求升級(jí)的實(shí)現(xiàn)方式。為讀者提供了全面的了解和使用指導(dǎo)。
如果你喜歡我的文字,還有一個(gè)專門輸出心情類文字的地方:(wx)搜索:llxxmev