前言
原文地址:deproject/KB/graphics/zedgraph.aspx
ZedGraph是用于创建任意数据的二维线型、棒型、饼型图表的一个类库,也可以作为Windows窗体用户控件和ASP网页访问控件。这个类库具有高度的灵活性,几乎所有式样的图表都能够被创建。这个类库的用法在于通过提供所有图表属性的省缺值来保持使用性的简单。这个类库包含了基于要绘制的数值范围内可选择适当度量范围和跨度的代码。此外,ZedGraph与.NET 2.0和VS.NET2005兼容的。
ZedGraph保持作为建立在SourceForge开源开发项目。该网站包括项目信息、文件、更新支持和所有发布版本。
一套图表实例连同所有的源代码(样本许多包括C#和VB代码)对于SourceForge也是同样有用的。
ZedGraph目前支持的.NET 2.0和.NET 1.1。
对于.NET 2.0,使用ZedGraph版本5.0 +。
对于.NET 1.1,使用ZedGraph版本4.5 +。
背景
世面上有许多的图表组件,但是没有一个符合我的要求。我发现MSChart 太奇怪,而且许多配置选项没有我所需要的适应性用来完成一个漂亮的视觉效果。当然大多数的商业包能够作到这些,但是我需要一些免费的东西,所以ZedGragh诞生了。
这些类将在一个窗体上产生一个线条,条型,或者图表,并给予一个矩形和一些数据点。ZedGraph 可以构建二维的线性/离散的图形,横/纵坐标轴,花哨的棒图,精致的百分比棒图,错误图和饼型图——他不能构建三维的外观或图表。最近还加入了对于ASP.NET页面中图形处理方法。可以参看下载资料中的关于ASP的文档。所绘制的图表能够配上轴标签和标题,一个图例,文本标签和箭头,图片等等。
ZedGraphWiki和在线类文档提供很多有用的技巧和说明。更多的详细资料
——ZedGraph有很多在说明文档中没有说明的配置选项。
VB 用户
本文专门利用C#作为例子,但是,所有的代码示例教程和其他的例子是针对Visual Basic关于ZedGraphWiki样品图一节。
作为Web控件使用ZedGraph
ZedGraph现在具有一个可以应用到ASPX的Web控件类。提供下载演示项目示范了这个功能。此外,ZedGraphWiki包括使用两个渲染模式RawImage和ImageTag 的Web控件的详细例子。
作为用户控件使用ZedGraph
可以在Visual Studio .NET的工具箱中添加ZedGraph控件。首先,打开Visual Studio .NET,新建一个Windows项目,打开窗体设计器显示当前窗口。要查看工具箱,使用主菜单的视图-工具箱命令。右键单击工具箱上的“我的用户控件”或“组件”栏,然后选择“添加/删除项”选项。点击“浏览”,选取“ZedGraph.dll ”文件。一旦文件添加了,你可以看到一个ZedGraphControl选项在工具栏中。
1.在您的项目的菜单下,选择“添加引用...”选项,使用浏览按钮,到
ZedGraph.dll,然后单击确定。重复上述步骤添加ZedGraph.Web.dll。这
将在您的项目包含ZedGraph的所有功能。
2.添加使用ZedGraph;进入你的主窗体的代码。
3.在窗体设计器,从工具箱拖动ZedGraphControl到该窗体,拖至需要的
大小。您的窗体现在有一个ZedGraph控件。
4.在ZedGraphControl.MasterPane的属性中,所有的ZedGraph功能是可
用的。ZedGraphControl.GraphPane还规定,它只是引用MasterPane列
表中第一个GraphPane(这是下面解释)。
5.在窗体设计器,双击窗体(而不是ZedGraphControl),这将会在你的
代码文件替换成Form1_Load()模板。
6.再次在窗体设计器,选定窗体,转到属性,选中黄高亮事件,把光标
移到Resize事件的右边,并按下Enter键,添加一个Form1_Resize事件方法到代码文件中。
7.修改Form1_Load()和Form1_Resize方法,并添加CreateGraph()
和setSize()方法如下所示(此代码假定您的控件的名称是'zedGraphControl1')。<;注:此代码包含完整的解决方案可以从ZedGraph 维基下载。>
Collapse
// Respond to the form 'Resize' event
private void Form1_Resize( object sender, EventArgs e )
{
SetSize();
}
// SetSize() is separate from Resize() so we can
// call it independently from the Form1_Load() method
// This leaves a 10 px margin around the outside of the control
// Customize this to fit your needs
private void SetSize()
{
zedGraphControl1.Location = new Point( 10, 10 );
/
/ Leave a small margin around the outside of the control
zedGraphControl1.Size = new Size( ClientRectangle.Width - 20,
ClientRectangle.Height - 20 );
}
// Respond to form 'Load' event
private void Form1_Load( object sender, EventArgs e )
{
// Setup the graph
CreateGraph( zedGraphControl1 );
// Size the control to fill the form with a margin
SetSize();
}
// Build the Chart
private void CreateGraph( ZedGraphControl zgc )
{
// get a reference to the GraphPane
pane
GraphPane myPane = zgc.GraphPane;
// Set the Titles
myPane.Title.Text = "My Test Graph\n(For CodeProject Sample)";
myPane.XAxis.Title.Text = "My X Axis";
myPane.YAxis.Title.Text = "My Y Axis";
// Make up some data arrays based on the Sine function
double x, y1, y2;
PointPairList list1 = new PointPairList();
PointPairList list2 = new PointPairList();
for ( int i = 0; i < 36; i++ )
{
x = (double)i + 5;
y1 = 1.5 + Math.Sin( (double)i * 0.2 );
y2 = 3.0 * ( 1.5 + Math.Sin( (double)i * 0.2 ) );
list1.Add( x, y1 );
list2.Add( x, y2 );
}
/
/ Generate a red curve with diamond
// symbols, and "Porsche" in the legend
LineItem myCurve = myPane.AddCurve( "Porsche",
list1, Color.Red, SymbolType.Diamond );
// Generate a blue curve with circle
// symbols, and "Piper" in the legend
LineItem myCurve2 = myPane.AddCurve( "Piper",
list2, Color.Blue, SymbolType.Circle );
// Tell ZedGraph to refigure the
// axes since the data have changed
zgc.AxisChange();
}
请注意,AxisChange()方法调用必须随时添加或更改数据。这要求ZedGraph重新计算所有轴的范围。(注:这就如AxisChange()所做——你可以随时调用它,它会基于当前数据点更新轴范围。如果你不想重新调节也可避免调用AxisChange()。)
上面的代码将产生的输出如下: