文章目录
- 一、ZedGraph介绍
- ZedGraph的特点
- ZedGraph的缺点
- 使用注意事项
- 二、ZedGraph官网
- 三、ZedGraph的应用
- 四、ZedGraph的高端应用
- 五、、总结
一、ZedGraph介绍
ZedGraph 是一个用于绘制图表和图形的开源.NET图表库。它提供了丰富的功能和灵活性,可以用于创建各种类型的图表,包括折线图、柱状图、饼图等。ZedGraph 支持多种数据源,包括数组、数据表和实时数据流,同时还提供了丰富的定制选项,使用户能够轻松地定制图表的外观和行为。这个库在.NET开发中被广泛应用于数据可视化和报表生成等领域。
ZedGraph.dll的源码库代码:
ZedGraph的特点
- 可以先生成图片后再显示,这对一些多用户并发有点帮助。(RenderMode.ImageTag)
- 可以动态生成,不用保存文件,可以减少IO的读写消耗。(RenderMode.RawImage)
- 比较多的呈现方式,比如曲线图、柱状图、饼图等。
ZedGraph的缺点
- 编码的时候,在设置属性不方便,一点注释都没有,不要说是中文的啦,就连英文都没有,太不方便了。
- 图表的显示比较简陋,没有OpenFlashChar来得好看。
使用注意事项
- dll文件当前的最新版本是5.1.5,我以前也使用过4.3.4的版本,这两个版本的差别很大,很多属性都已经不存在了,面向对象的感念可能加强了不少,也清晰了不少,因为现在的属性设置都是先实体,再属性了,而以前就比较混乱了。所以在使用不同的版本的时候要注意这点。
- 在Windows Forms和 ASP.Net Web Form项目中使用是不同。
二、ZedGraph官网
https://sourceforge.net/projects/zedgraph/files/
官网中可以看到ZedGraph的介绍,在文件列可以下载dll文件和使用例子。都是.NET平台下C#语言的,可以在VisualStudio中查看代码,以及运行代码
三、ZedGraph的应用
1、新建WinForm项目。
2、在官网中下载ZedGraph.dll库文件,在项目中引用,并添加命名空间。
3、工具箱中添加ZedGraph控件。
4、在Form1中拖入一个ZedGraphControl控件,修改name属性为myZedgraph。
5、项目中的代码如下:
这是一个简单的 Windows 窗体应用程序,使用 ZedGraph 库来绘制速度随时间变化的曲线图。关键步骤如下:
1). 初始化图表控件 (InitZedGraph 方法):
- 在 InitZedGraph方法中,首先获取 GraphPane对象,然后设置图表的标题、X轴和Y轴的标题。
- 接着使用 PointPairList对象 vlist存储时间和速度的数据点。
- 使用 AddCurve方法创建一条红色的菱形样式曲线,并将数据点 vlist绑定到曲线上。
- 设置了一些图表的显示样式,如网格线、刻度颜色、背景颜色等。
- 最后调用 AxisChange 方法刷新轴。
2). 定时器刷新曲线 (ChartTimer_Tick 方法):
- 在 ChartTimer_Tick方法中,通过定时器每隔一定时间触发,模拟生成随机速度数据,并将新的数据点添加到 vlist 中。
- 每次添加新数据后,更新时间 time 的值,并调用 AxisChange 方法和 Refresh方法刷新曲线。
3). Form1 构造函数:
- 在构造函数中,初始化 ZedGraph 控件并启动定时器,每隔一定时间刷新曲线。
4). Form1_Load 方法:
- 在 Form1_Load 方法中,弹出一个消息框显示 “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
{
//定时器刷新曲线
Timer ChartTimer;
//时间
int time = 30;
//记录曲线值
PointPairList vlist = new PointPairList();
public Form1()
{
InitializeComponent();
//初始化ZedGraph
InitZedGraph();
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 = "测试速度";
myPane.XAxis.Title.Text = "时间";
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的网格线
myPane.XAxis.MajorGrid.IsVisible = true;
//设置Y轴刻度为红色
myPane.YAxis.Scale.FontSpec.FontColor = Color.Red;
myPane.YAxis.Title.FontSpec.FontColor = Color.Red;
//隐藏Y轴对面的刻度显示
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;
//设置刻度范围
myPane.YAxis.Scale.Align = AlignP.Inside;
myPane.YAxis.Scale.Max = 100;
myPane.YAxis.Scale.MaxAuto = true;
//设置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)
{
//随机数据模拟
Random random = new Random();
double v = random.Next(30, 60);
//添加新的数据
vlist.Add(time, v);
time += 2;
//曲线刷新
myZedGraph.AxisChange();
myZedGraph.Refresh();
}
}
}
运行结果,动态增加点:
数据点和线等属性可以调整:
6、需求升级
客户不想看到这么多数据,只想看到最新的前三十条数据怎么做呢?
方法1 判断数据是否超过30,大于30之后每添加新的数据就把最前面的一个数据移除掉
方法2 不需要移除数据,更新X轴的范围,让其只绘制前面30个数据。这个方法需要知道30个数据X轴的具体值是多少。
方法1:修改定时器刷新函数ChartTimer_Tick(object sender, EventArgs e)
1). 随机数据模拟:
- 首先通过 Random 类生成一个随机速度值 v ,范围在 30 到 60 之间。
2). 添加新的数据:
- 使用 vlist.Add(time, v) 将新的数据点添加到 vlist 中,其中 time 是时间值,每个点的时间间隔为 2。
3). 保留最新的 30 个数据:
- 在 if (vlist.Count > 30) 的条件判断中,当数据点数量超过 30 个时,通过 vlist.RemoveAt(0) 移除最早的数据点,以保持数据点数量为最新的 30 个。
4). 曲线刷新:
- 最后调用 AxisChange 方法和 Refresh 方法刷新曲线,确保新的数据点能够正确显示在图表中。
这段代码实现了在不断更新数据点的同时保留最新的 30 个数据点,确保图表中显示的数据点数量不会无限增长。这样可以有效管理数据点的数量,避免数据量过大导致图表显示效果不佳。
/// <summary>
/// 刷新曲线
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ChartTimer_Tick(object sender, EventArgs e)
{
//随机数据模拟
Random random = new Random();
double v = random.Next(30, 60);
//添加新的数据
vlist.Add(time, v);
time += 2;
#region 方法1
if (vlist.Count > 30)
{// 保留最新的30个数据
vlist.RemoveAt(0);
}
#endregion
//曲线刷新
myZedGraph.AxisChange();
myZedGraph.Refresh();
}
结果如下:可以看到数据量一直保持在30个,前面的数据会被移除掉。
方法2:
1). 随机数据模拟:
- 首先通过 Random 类生成一个随机速度值 v ,范围在 30 到 60 之间。
2). 添加新的数据:
- 使用 vlist.Add(time, v) 将新的数据点添加到 vlist 中,其中 time 是时间值,每个点的时间间隔为 2。
3). 更新数据点的时间间隔:
- 每次添加新数据后,更新时间 time 的值,确保每个数据点的时间间隔为 2。
4). 方法1 (注释部分):
- 这部分代码是一种方法来保留最新的 30 个数据点,当数据点数量超过 30 个时,移除最早的数据点。
5). 方法2:
- 这部分代码是另一种方法来限制数据点数量为 30 个,并更新X轴的显示范围。
- 当数据点数量达到或超过 30 个时,设置X轴的最大值为当前时间 time ,并根据每个点的时间间隔计算出X轴的最小值,以确保只显示最新的 30 个数据点。
6). 曲线刷新:
- 最后调用 AxisChange 方法和 Refresh 方法刷新曲线,确保新的数据点能够正确显示在图表中。
这段代码实现了在不断更新数据点的同时限制数据点数量为最新的 30 个,并根据数据点的时间间隔更新X轴的显示范围。这样可以保持图表中显示的数据点为最新的数据,同时避免数据点数量过多导致图表混乱。
/// <summary>
/// 刷新曲线
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ChartTimer_Tick(object sender, EventArgs e)
{
//随机数据模拟
Random random = new Random();
double v = random.Next(30, 60);
//添加新的数据
vlist.Add(time, v);
//每个点的时间间隔
time += 2;
#region 方法1
//if (vlist.Count > 30)
//{// 保留最新的30个数据
// vlist.RemoveAt(0);
//}
#endregion
#region 方法2
if (vlist.Count >= 30)
{//更新X轴的显示范围
myZedGraph.GraphPane.XAxis.Scale.Max = time;
//每个点的时间间隔
myZedGraph.GraphPane.XAxis.Scale.Min = time - (30 * 2);
}
#endregion
//曲线刷新
myZedGraph.AxisChange();
myZedGraph.Refresh();
}
运行如下:这个效果就看着比较连续,没有太多空旷的地方
四、ZedGraph的高端应用
ZedGraph的图表种类、属性很多,可以搜索相关实际高端应用,学习一下这个控件的强大功能的使用场景。
五、、总结
这篇文章是关于 ZedGraph 图表库的介绍和应用指南。文章主要包括以下内容:
-
ZedGraph介绍:介绍了 ZedGraph 是一个用于绘制图表和图形的开源.NET图表库,具有丰富的功能和灵活性,适用于各种类型的图表,如折线图、柱状图、饼图等。同时列出了 ZedGraph 的特点和缺点,并提到了在不同版本之间的差异。
-
ZedGraph官网:提供了 ZedGraph 的官方网址,用户可以在该网站上找到库文件的下载和使用示例。
-
ZedGraph的应用:详细介绍了如何在 WinForm 项目中使用 ZedGraph 库,包括下载库文件、引用和添加控件等步骤。同时给出了示例代码,展示了如何在 Windows 窗体应用程序中绘制速度随时间变化的曲线图。
-
需求升级:针对客户需求升级,只展示最新的前三十条数据,提供了两种方法来实现这一需求。方法一是保留最新的 30 个数据点,方法二是更新X轴的显示范围,只绘制前面 30 个数据点。提供了相应的代码和运行结果展示。
-
总结:文章对整个内容进行了总结,概括了 ZedGraph 的特点、官网地址、应用方法以及需求升级的实现方式。为读者提供了全面的了解和使用指导。
如果你喜欢我的文字,还有一个专门输出心情类文字的地方:(wx)搜索:llxxmev