当前位置:首页 >> 信息与通信 >>

ZedGraph控件属性及基础教程详解


ZedGraph 属性及基础教程

ZedGraph 控件属性设置 ZedGraph 是一个非常优秀的开源的作图控件 ZedGraph 来源:http://sourceforge.net/project/showfiles.php?group_id=114675 ZedGraph 相关例子资源:http://zedgraph.org/wiki/index.ph

p?title=Sample_Graphs 1、在 vs 中使用 ZedGraph 2、 基本一些概念 几个注意点: 图片的保存路径设置:RenderedImagePath 属性中设置,程序对该文件夹应该是有写和修改权限的 图片的输出格式:OutputFormat 属性中设置,Png 的推荐,比较清晰。 Chart ChartBorder 图表区域的边框设置 ChartFill 图表区域的背景填充 Legend 图表的注释标签显示设置项目,一组数据对应一种颜色的注释 IsHStack 当有多个显示项的时候设置 Y 轴数据是叠加的还是分开的 Xaxis 图表区域的 X 轴相关信息设置 AxisColor 坐标轴颜色 Cross 坐标的原点,可以设置坐标的偏移程度 CrossAuto 原点自动设置:True 的话 Cross 的设置就无效了。 FontSpec X 轴标题字体相关信息 Angle X 轴标题字体显示时候的角度,0 为水平 90 为垂直 Fill X 轴标题字体填充信息 ColorOpacity 透明度 IsScaled 设置 X 轴标题字体显示大小是否根据图的比例放大缩小 RangeMax 填充时候的最大倾斜度(有过渡色,没试过) RangeMin 填充时候的最小倾斜度(有过渡色,没试过) StringAlignment X 轴标题字体排列(不清楚,没试过) IsOmitMag 是否显示指数幂(10 次方,没试过,似乎与 IsUseTenPower 有关系) IsPreventLabelOverlap 坐标值显示是否允许重叠,如果 False 的话,控件会根据坐标值长度自动消除部 分坐标值的显示状态 IsShowTitle X 轴标题是否显示 IsTicsBetweenLabels 两个坐标值之间是否自动显示分隔标志 IsUseTenPower 是否使用 10 次幂指数 IsVisible 是否显示 X 轴 IsZeroLine 当数据为 0 时候是否显示(在饼状图显示的时候有用) MajorGrid 大跨度的 X 轴表格虚线线显示信息 DashOff 虚线中孔间距 DashOn 虚线单位长度 MajorTic 大跨度的 X 轴刻度信息 IsInside 在 Chart 内部是否显示 IsOutSide 在 Chart 外部是否显示 IsOpposite 在对面的轴上是否显示 MinorGrid 小跨度的 X 轴表格虚线显示信息 MinorTic 小跨度的 x 轴刻度信息 MinSpace 刻度和轴之间的距离(没试过) Scale 刻度值的一些设定 IsReverse X 轴的刻度值从高到低还是从低到高 MajorStep 大刻度步长
1 / 33

ZedGraph 属性及基础教程

MajorStepAuto MajorUnit Max MaxAuto Min MinAuto MinGrace MinorStep MinorStepAuto MinorUnit Type

Y2Axis Yaxis GraphPane BarBase BarType IsFontsScaled IsIgnoreInitial IsIgnoreMissing IsPenWidthScaled IsShowTitle PaneFill MasterPane BaseDimension 数据 外观 IsImageMap 行为 AxisChaneged CacheDuration OutputFormat RenderedImagePath RenderMode

是否自动设置大刻度步长 大刻度步长单位 刻度最大值 根据输入数据自动设置刻度最大值 刻度最小值 根据输入数据自动设置刻度最小值 不清楚,没试过 小刻度步长 是否自动设置小刻度步长 小刻度单位 数据显示方式 Liner 直接现实(自动) Date 按日期方式显示 Log 按指数幂方式显示 Ordinal 顺序显示 第二个 Y 轴坐标信息显示(具体设置看 X 轴) 第一个 Y 轴坐标信息显示(具体设置看 X 轴) 在生成柱状图的时候设置柱状是基于 X 轴还是其他轴 柱状的类型叠加或其他。 图比例变化时候图表上的文字是否跟着自动缩放 是否忽略初始值 是否忽略缺省值 图比例变化时候图表上的画笔的粗细是否跟着自动缩放 图表标题是否显示 Pane 的一些填充信息 缩放比例基数(可以试试效果) 未测试过。不知道如何和数据库绑定 不清楚干吗用的 是否允许自动绘图(没试过,一般都 true,动态绘图) Cache 保存时间 0 输出格式 输出路径 输出模式,不太清楚一般都是 ImageTag,另一个输出的是乱码不是图片

对于图表而言,一般是三种表现形式:柱状图、饼状图和点线图。

2 / 33

ZedGraph 属性及基础教程

基本教程篇--第一节:InitialSampleDemo.cs 介绍

为了讲解方便,我先附上源代码和效果图。

代码如下: using System; using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo { ///<summary> /// Summary description for SimpleDemo. ///</summary> public class InitialSampleDemo : DemoBase { public InitialSampleDemo() : base( "Code Project Initial Sample","Initial Sample", DemoType.Tutorial ) { GraphPane myPane = base.GraphPane; // Set the title and axis labels 3 / 33

ZedGraph 属性及基础教程 myPane.Title = "My Test Graph\n(For CodeProject Sample)"; myPane.XAxis.Title = "My X Axis"; myPane.YAxis.Title = "My Y Axis";

// Make up some data arrays based on the Sine function PointPairList list1 = new PointPairList(); PointPairList list2 = new PointPairList(); for ( int i=0; i<36; i++ ) { double x = (double) i + 5; double y1 = 1.5 + Math.Sin( (double) i * 0.2 ); double 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 ); base.ZedGraphControl.AxisChange(); } } } 我们可以看到,InitialSampleDemo 继承自 CemoBase 类,而 DemoBase 又继承自 ZedGraphDemo 这个接口。ZedGraphDe mo 接口定义了 String Description、String Title、ZedGraph. ZedGraphControl ZedGraphControl 和 System.Collection.IColl ection Types 这四个属性。DemoBase 除了实现这四个属性外,还添加了 PaneBase Pane 和 MasterPane MasterPane 这两个属性, 此外 DemoBase 还实现了多载构造函数。关于各个类的具体含义和用法,我会在以后的篇幅中陆续介绍。这里只是给大家一个整体的大致结 构。 下面进行对代码的分析,由于这是第一个例子,所有我会讲得比较细,以后的例子就不会了。 我们可以看到程序首先 4 / 33

ZedGraph 属性及基础教程 public InitialSampleDemo() : base( "Code Project Initial Sample" , "Initial Sample", DemoType.Tutorial ) 初始化基类的构造函数。基类重载了四个构造函数 public DemoBase( string description, string title, DemoType type ) { ArrayList types = new ArrayList(); types.Add( type ); Init( description, title, types ); } public DemoBase( string description, string title, DemoType type, DemoType type2 ) { ArrayList types = new ArrayList(); types.Add( type ); types.Add( type2 ); Init( description, title, types ); } public DemoBase( string description, string title, ICollection types ) { Init( description, title, types ); } private void Init( string description, string title, ICollection types ) { this.description = description; this.title = title; this.types = types; control = new ZedGraphControl(); } 函数中的变量含义如下: Description:对此结构的描述。 Title:在树形结构(TreeView)中显示的标题。 Types:要把此类显示在哪个树形结构的区域中。若有多个 Types,则把此类分入不同的树形区域中。例如 MasterPane Sample 在 Tutori al Sample 和 Special Features 两个区域都有。见图中的相应区域标注。

5 / 33

ZedGraph 属性及基础教程

myPane.Title = "My Test Graph\n(For CodeProject Sample)"; myPane.XAxis.Title = "My X Axis"; myPane.YAxis.Title = "My Y Axis"; 分别指定这个 Pane 的 title、XAxis 和 YAxis 的标题。见上图。 PointPairList list1 = new PointPairList(); PointPairList list2 = new PointPairList(); for ( int i=0; i<36; i++ ) { double x = (double) i + 5; double y1 = 1.5 + Math.Sin( (double) i * 0.2 ); double y2 = 3.0 * ( 1.5 + Math.Sin( (double) i * 0.2 ) ); list1.Add( x, y1 ); list2.Add( x, y2 ); } PointPairList 类是一个集合类,继承自 System.Object System.Collections.CollectionBase ZedGraph.CollectionPlus 它是 PointPair 对象的集合,PointPair 类是一个包含(X,Y)的坐标类。 6 / 33

ZedGraph 属性及基础教程 其中的 for 循环在为两个 PointPairList 复值。

LineItem myCurve = myPane.AddCurve( "Porsche", list1, Color.Red, SymbolType.Diamond ); LineItem 类是 ZedGraph 中的线条类. myPane.AddCurve( "Porsche", list1, Color.Red, SymbolType.Diamond ); 的意思是将刚刚赋值的 list 以”Porsche”这个名字以红色和水晶形状画到 Pane 中,这个函数的返回值是一个 LineItem。你可以通过 myCu rve 这个变量来对它进行进一步的设定。其中 SymbolType 是个 Enum,它枚举了 12 个可供使用的形状

最后一步就是刷新了。base.ZedGraphControl.AxisChange(); 这样整个程序就完成了,简单吧,其实这是个简单的应该,以后会介绍更加复杂的用法和类库。

基本教程篇--第二节:ModInitialSampleDemo.cs 介绍

为了讲解方便,我先附上源代码和效果图。

代码如下:
using System; using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo 7 / 33

ZedGraph 属性及基础教程

{
///<summary> /// Summary description for SimpleDemo. ///</summary> public class ModInitialSampleDemo : DemoBase { public ModInitialSampleDemo() : base( "Code Project Modified Initial Sample", "Modified Initial Sample", DemoType.Tutorial ) { GraphPane myPane = base.GraphPane; // Set up the title and axis labels myPane.Title = "My Test Graph\n(For CodeProject Sample)"; myPane.XAxis.Title = "My X Axis"; myPane.YAxis.Title = "My Y Axis"; // Make up some data arrays based on the Sine function PointPairList list1 = new PointPairList(); PointPairList list2 = new PointPairList(); for ( int i=0; i<36; i++ ) { double x = (double) i + 5; double y1 = 1.5 + Math.Sin( (double) i * 0.2 ); double 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 ); // Change the color of the title 8 / 33

ZedGraph 属性及基础教程 myPane.FontSpec.FontColor = Color.Green; // Add gridlines to the plot, and make them gray myPane.XAxis.IsShowGrid = true; myPane.YAxis.IsShowGrid = true; myPane.XAxis.GridColor = Color.LightGray; myPane.YAxis.GridColor = Color.LightGray;

// Move the legend location base.Pane.Legend.Position = ZedGraph.LegendPos.Bottom; // Make both curves thicker myCurve.Line.Width = 2.0F; myCurve2.Line.Width = 2.0F; // Fill the area under the curves myCurve.Line.Fill = new Fill( Color.White, Color.Red, 45F ); myCurve2.Line.Fill = new Fill( Color.White, Color.Blue, 45F ); // Increase the symbol sizes, and fill them with solid white myCurve.Symbol.Size = 8.0F; myCurve2.Symbol.Size = 8.0F; myCurve.Symbol.Fill = new Fill( Color.Red ); myCurve2.Symbol.Fill = new Fill( Color.White ); // Add a background gradient fill to the axis frame myPane.AxisFill = new Fill( Color.White, Color.FromArgb( 255, 255, 210), -45F ); // Add a caption and an arrow TextItem myText = new TextItem( "Interesting\nPoint", 23F, 7F ); myText.FontSpec.FontColor = Color.Red; myText.Location.AlignH = AlignH.Center; myText.Location.AlignV = AlignV.Top; myPane.GraphItemList.Add( myText ); ArrowItem myArrow = new ArrowItem( Color.Red, 12F, 7F, 5F, 20F, 8F ); myPane.GraphItemList.Add( myArrow ); base.ZedGraphControl.AxisChange(); 9 / 33

ZedGraph 属性及基础教程 } }

} 我们可以看到,这个例子和第一节中的例子大部分都相同,我在这只讲它们不同的地方,和不好懂的地方。 和第一节的图相比,本节的图在 Pane 上添加了 Grid 的显示,其功能要归功于如下代码:
myPane.XAxis.IsShowGrid = true; myPane.YAxis.IsShowGrid = true; myPane.XAxis.GridColor = Color.LightGray; myPane.YAxis.GridColor = Color.LightGray;

代码一目了然,我就不用多解释什么了,要说的是注意在 ZedGraph 中,很多都是有缺省值的,IsShowGrid 的缺省值就是 f alse,所以第一节中没有对此项进行设置就没有显示 Grid。

上节我就已经说过 LineItem myCurve = myPane.AddCurve( "Porsche",list1, Color.Red, SymbolType.Diamond ); myCurve 接收 myPane.AddCurve 的返回值后就可以对里面的线图作近一步的描述,
myCurve.Line.Width = 2.0F;、myCurve.Line.Fill = new Fill( Color.White, Color.Red, 45F ); 和 myCurve.Symbol.Fill = new Fill( Color.Red );

就是其中的三个应用,一个是 Line 的宽度,第二个表示 Line 要填充下面的区域,以 45 度角从左到右从白到红的填充,第三 个表示线图上的符号被填充成什么颜色的。效果见下图:

关于 Legend 的类请见下图:
base.Pane.Legend.Position = ZedGraph.LegendPos.Bottom;

10 / 33

ZedGraph 属性及基础教程

就是显示 Pane 中的图形的名字,它里面也有很多属性和方法,如果大家写上 base.Pane.Legend.IsVisible = false ;那么就可 以隐藏图形的名字。
TextItem 类的主要方法是在 Pane 中显示一个 textbox 的文本框,见上图 ArrowItem 类的主要方法是在 Pane 上显示一个箭头,

ArrowItem myArrow = new ArrowItem( Color.Red, 12F, 7F, 5F, 20F, 8F ); 构造函数的参数含义分别为颜色,箭头的大小,箭头的起始(x,y),终止(x,y)。

基本教程篇--第三节、第四节 DateAxisSampleDemo.cs 和 TextAxisSampleDemo.cs 介绍

由于这两个例子很简单也很相似,所以决定还是放到一起来写。按照惯例还是先给出代码和图示。

11 / 33

ZedGraph 属性及基础教程

代码如下: DateAxisSampleDemo:
using System; using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo

{
12 / 33

ZedGraph 属性及基础教程 ///<summary> /// Summary description for SimpleDemo. ///</summary> public class DateAxisSampleDemo : DemoBase { public DateAxisSampleDemo() : base( "Code Project Date Axis Sample", "Date Axis Sample", DemoType.Tutorial ) { GraphPane myPane = base.GraphPane; // Set the titles and axis labels myPane.Title = "My Test Date Graph"; myPane.XAxis.Title = "Date"; myPane.YAxis.Title = "My Y Axis"; // Make up some data points based on the Sine function PointPairList list = new PointPairList(); for ( int i=0; i<36; i++ ) { double x = (double) new XDate( 1995, 5, i+11 ); double y = Math.Sin( (double) i * Math.PI / 15.0 ); list.Add( x, y ); } // Generate a red curve with diamond // symbols, and "My Curve" in the legend LineItem myCurve = myPane.AddCurve( "My Curve", list, Color.Red, SymbolType.Diamond ); // Set the XAxis to date type myPane.XAxis.Type = AxisType.Date; base.ZedGraphControl.AxisChange(); } }

}

13 / 33

ZedGraph 属性及基础教程

TextAxisSampleDemo:
using System; using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo

{
///<summary> /// Summary description for SimpleDemo. ///</summary> public class TextAxisSampleDemo : DemoBase { public TextAxisSampleDemo() : base( "Code Project Text Axis Sample", "Text Axis Sample", DemoType.Tutorial ) { GraphPane myPane = base.GraphPane; // Set the title and axis labels myPane.Title = "My Test Date Graph"; myPane.XAxis.Title = "Label"; myPane.YAxis.Title = "My Y Axis"; // Make up some data points string[] labels = { "USA", "Spain\nMadrid", "Qatar", "Morocco", "UK", "Uganda", "Cambodia", "Malaysia", "Australia", "Ecuador" }; double[] y = new double[10]; for ( int i=0; i<10; i++ ) y[i] = Math.Sin( (double) i * Math.PI / 2.0 ); // Generate a red curve with diamond // symbols, and "My Curve" in the legend LineItem myCurve = myPane.AddCurve( "My Curve",null, y, Color.Red, SymbolType.Diamond ); //Make the curve smooth myCurve.Line.IsSmooth = true; // Set the XAxis to Text type 14 / 33

ZedGraph 属性及基础教程 myPane.XAxis.Type = AxisType.Text; // Set the XAxis labels myPane.XAxis.TextLabels = labels; // Set the labels at an angle so they don't overlap myPane.XAxis.ScaleFontSpec.Angle = 40; base.ZedGraphControl.AxisChange(); } }

} 看到前两节的介绍,这里的代码就应该很简单了,我要说的只有两个类 XDate 和 TextLabel 这个属性。 首先 XDate 就相当于 msdn 中的 DateTime 这个类,是个时间日期类,也是具有多个构造函数,XDate( 1995, 5, i+11 )是 按年月日来初始化的。 第二个就是 TextLabel 属性,它主要是把 Label 的内容显示在 Pane 上。如 TextAxisSampleDemo 的 X 轴。

基本教程篇--第五节 BarChartSampleDemo.cs 介绍

从这节开始,我们将进入柱形图的研究(如下图),首先从最简单的 BarChartSampleDemo 开始,我们一步一步进入 Z edGraph 的柱形世界。

代码如下:
using System; 15 / 33

ZedGraph 属性及基础教程 using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo

{
///<summary> /// Summary description for SimpleDemo. ///</summary> public class BarChartSampleDemo : DemoBase { public BarChartSampleDemo() : base( "Code Project Bar Chart Sample", "Bar Chart Sample", DemoType.Tutorial ) { GraphPane myPane = base.GraphPane; // Set the titles and axis labels myPane.Title = "My Test Bar Graph"; myPane.XAxis.Title = "Label"; myPane.YAxis.Title = "My Y Axis"; // Make up some random data points string[] labels = { "Panther", "Lion", "Cheetah", "Cougar", "Tiger", "Leopard" }; double[] y = { 100, 115, 75, 22, 98, 40 }; double[] y2 = { 90, 100, 95, 35, 80, 35 }; double[] y3 = { 80, 110, 65, 15, 54, 67 }; double[] y4 = { 120, 125, 100, 40, 105, 75 }; // Generate a red bar with "Curve 1" in the legend BarItem myBar = myPane.AddBar( "Curve 1", null, y, Color.Red ); myBar.Bar.Fill = new Fill( Color.Red, Color.White, Color.Red ); // Generate a blue bar with "Curve 2" in the legend myBar = myPane.AddBar( "Curve 2", null, y2, Color.Blue ); myBar.Bar.Fill = new Fill( Color.Blue, Color.White, Color.Blue ); // Generate a green bar with "Curve 3" in the legend myBar = myPane.AddBar( "Curve 3", null, y3, Color.Green ); 16 / 33

ZedGraph 属性及基础教程 myBar.Bar.Fill = new Fill( Color.Green, Color.White, Color.Green ); // Generate a black line with "Curve 4" in the legend LineItem myCurve = myPane.AddCurve( "Curve 4",null, y4, Color.Black, SymbolType.Circle ); myCurve.Line.Fill = new Fill( Color.White, Color.LightSkyBlue, -45F ); // Fix up the curve attributes a little myCurve.Symbol.Size = 8.0F; myCurve.Symbol.Fill = new Fill( Color.White ); myCurve.Line.Width = 2.0F; // Draw the X tics between the labels instead of at the labels myPane.XAxis.IsTicsBetweenLabels = true;

// Set the XAxis labels myPane.XAxis.TextLabels = labels; // Set the XAxis to Text type myPane.XAxis.Type = AxisType.Text; // Fill the axis area with a gradient myPane.AxisFill = new Fill( Color.White,Color.FromArgb( 255, 255, 166), 90F ); // Fill the pane area with a solid color myPane.PaneFill = new Fill( Color.FromArgb( 250, 250, 255) ); base.ZedGraphControl.AxisChange(); } }

} 这一节,我们主要介绍 BarItem 这个类,这个类就是 ZedGraph 中关于柱形的类。它的继承关系如下: System.Object ZedGraph.CurveItem ZedGraph.BarItem

它的基类 ZedGraph.CurveItem 里包含了 Pane 上单个曲线图表的数据和方法。 它实现了图表的属性设置, 例如关键词(Key), 成员的名字、颜色、符号、尺寸和线条的风格等等。 BarItem 中有五个构造函数,其中有两个是大家常用的,如下: //Create a new BarItem, specifying only the legend label for the bar. public BarItem(string); //Create a new BarItem using the specified properties.
17 / 33

ZedGraph 属性及基础教程

public BarItem(string,double[],double[],Color);

BarItem myBar = myPane.AddBar( "Curve 1", null, y, Color.Red ); myBar.Bar.Fill = new Fill( Color.Red, Color.White, Color.Red ); 这里用的是直接用 Pane 里的 AddBar 来设定柱形, 并且返回一个 BarItem 的引用, 让用户来对这个 Bar 进行进一步的描述。 我们可以看到构造函数中的 ”Curve1”就是在 Legend 中要显示的文字(关于 Legend 请看第一节)。X 轴上的轴标先不设定, 后面跟着 Y 轴和这个 Bar 的颜色。 第二行代码就使用 myBar 这个引用来对这个 Bar 进行红—白—红的颜色填充。

// Draw the X tics between the labels instead of at the labels myPane.XAxis.IsTicsBetweenLabels = true;

// Set the XAxis labels myPane.XAxis.TextLabels = labels; // Set the XAxis to Text type myPane.XAxis.Type = AxisType.Text; 第一行代码主要是对 X 轴上柱形的位置做一个设定,默认是居中对齐,如果不设定这一项目,或者设定这一项为 false,则柱 形在界面上的显示是居中的,如下图:(myPane.XAxis.IsTicsBetweenLabels = false;)

第二、三行代码的意思是设定 X 轴的坐标以文本方式显示,文本内容来自
18 / 33

ZedGraph 属性及基础教程

string[] labels。 // Fill the axis area with a gradient myPane.AxisFill = new Fill( Color.White,Color.FromArgb( 255, 255, 166), 90F ); // Fill the pane area with a solid color myPane.PaneFill = new Fill( Color.FromArgb( 250, 250, 255) ); 最后两句一个是设定 Pane 中轴的背景颜色,以 90 度的角度从白到淡黄的渐变效果;另一个是设定 Pane 的背景色,是淡灰白 色,在图中体现的不明显,请大家自己改成 Color.FromArgb( 250 , 250 , 0 )试试效果吧。 最后那个全填充的曲线图在第 1,2,3,4 节中已经都介绍过了,这里不再重复,请自己参看以前的章节。

基本教程篇--第六、七节 HorizontalBarSampleDemo.cs 和 StackedBarSampleDemo.cs 介绍

这两节与第五节相比,并没有本质上的区别,所以这里只给出相应的代码、示例图和必要的说明。

using System; using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo

{
///<summary> 19 / 33

ZedGraph 属性及基础教程 /// Summary description for SimpleDemo. ///</summary> public class HorizontalBarSampleDemo : DemoBase { public HorizontalBarSampleDemo() : base( "Code Project Horizontal Bar Chart Sample", "Horizontal Bar Sample", DemoType.Tutorial ) { GraphPane myPane = base.GraphPane; // Set the title and axis labels myPane.Title = "A Horizontal Percent Stack Graph"; myPane.XAxis.Title = "Stuff"; myPane.YAxis.Title = ""; // Enter some random data values double[] y = { 100, 115, 15, 22, 98 }; double[] y2 = { 90, 60, 95, 35, 30 }; double[] y3 = { 20, 40, 105, 15, 30 }; // Generate a red bar with "Nina" in the legend BarItem myCurve = myPane.AddBar( "Nina", y, null, Color.Red ); myCurve.Bar.Fill = new Fill( Color.Red, Color.White, Color.Red, 90F ); // Generate a blue bar with "Pinta" in the legend myCurve = myPane.AddBar( "Pinta", y2, null, Color.Blue ); myCurve.Bar.Fill = new Fill( Color.Blue, Color.White, Color.Blue, 90F ); // Generate a green bar with "Santa Maria" in the legend myCurve = myPane.AddBar( "Santa Maria", y3, null, Color.Green ); myCurve.Bar.Fill = new Fill( Color.Green, Color.White, Color.Green, 90F ); // Draw the Y tics between the labels instead of at the labels myPane.YAxis.IsTicsBetweenLabels = true; // Set the YAxis to text type myPane.YAxis.Type = AxisType.Text; string[] labels = { "Australia", "Africa", "America", "Asia", "Antartica" }; myPane.YAxis.TextLabels = labels; myPane.XAxis.Max = 110; 20 / 33

ZedGraph 属性及基础教程 // Make the bars horizontal by setting bar base axis to Y myPane.BarBase = BarBase.Y; // Make the bars percent stack type myPane.BarType = BarType.PercentStack; // Fill the axis background with a color gradient myPane.AxisFill = new Fill( Color.White, Color.FromArgb( 255, 255, 166), 90F ); // Fill the legend background with a color gradient myPane.Legend.Fill = new Fill( Color.White, Color.FromArgb( 255, 255, 250), 90F ); // Fill the pane background with a solid color myPane.PaneFill = new Fill( Color.FromArgb( 250, 250, 255) ); base.ZedGraphControl.AxisChange(); } }

}

using System; using System.Drawing; 21 / 33

ZedGraph 属性及基础教程 using System.Collections; using ZedGraph; namespace ZedGraph.Demo

{
///<summary> /// Summary description for SimpleDemo. ///</summary> public class StackedBarSampleDemo : DemoBase { public StackedBarSampleDemo() : base( "Code Project Stacked Bar Chart Sample","Stacked Bar Sample", De moType.Tutorial ) { GraphPane myPane = base.GraphPane; // Set the title and axis labels myPane.Title = "Cat Stats"; myPane.XAxis.Title = "Big Cats"; myPane.YAxis.Title = "Population";

// Make up some data points string[] labels = { "Panther", "Lion", "Cheetah", "Cougar", "Tiger", "Leopard" }; double[] y = { 100, 115, 75, 22, 98, 40 }; double[] y2 = { 120, 175, 95, 57, 113, 110 }; double[] y3 = { 204, 192, 119, 80, 134, 156 };

// Generate a red bar with "Curve 1" in the legend BarItem myCurve = myPane.AddBar( "Here", null, y, Color.Red ); // Fill the bar with a red-white-red color gradient for a 3d look myCurve.Bar.Fill = new Fill( Color.Red, Color.White, Color.Red ); // Generate a blue bar with "Curve 2" in the legend myCurve = myPane.AddBar( "There", null, y2, Color.Blue ); // Fill the bar with a Blue-white-Blue color gradient for a 3d look myCurve.Bar.Fill = new Fill( Color.Blue, Color.White, Color.Blue ); 22 / 33

ZedGraph 属性及基础教程 // Generate a green bar with "Curve 3" in the legend myCurve = myPane.AddBar( "Elsewhere", null, y3, Color.Green ); // Fill the bar with a Green-white-Green color gradient for a 3d look myCurve.Bar.Fill = new Fill( Color.Green, Color.White, Color.Green ); // Draw the X tics between the labels instead of at the labels myPane.XAxis.IsTicsBetweenLabels = true; // Set the XAxis labels myPane.XAxis.TextLabels = labels; // Set the XAxis to Text type myPane.XAxis.Type = AxisType.Text; // Set the bar type to stack, which stacks the bars by automatically accumulating the values myPane.BarType = BarType.Stack; base.ZedGraphControl.AxisChange(); } }

}

这两个图的区别就是基轴不同,一个是以 X 轴为基轴,一个是以 Y 轴为基轴,ZedGraph 中有相应的属性,很方便的在两个轴 之间转换。如下: myPane.BarBase = BarBase.Y;

下面我主要说说 myPane.BarType。 BarType 是一个枚举,共有六项,分别为 Cluster、ClusterHiLow、Overlay、SortedOverlay、Stack 和 PercentStack。

Cluster 和 ClusterHiLow 是让多个同一个基类 Bar 依次排开, Cluster 还可以使用来自 IPointList 的“Z”的值来定义每一个 B ar 的底部。
myPane.BarType = BarType.Cluster;或者 myPane.BarType = BarType.ClusterHiLow;如下图:

23 / 33

ZedGraph 属性及基础教程

Overlay 和 SortedOverlay 故名思意,就是柱形按坐标相互覆盖。不同之处在于 Overlay 是按照哪个先画哪个在前的原则(注 意这里不是按后画把先画的柱形覆盖的原则,而是正好相反按先画在前原则)。 SortedOverlay 是按位标的大小,按小的位标在前,大的位标在后的原则来绘图的。 如下两图,第一个是按 Overlay,第二个是 SortedOverlay。

24 / 33

ZedGraph 属性及基础教程

最后的两个 Stack 和 PercentStack 就是按先前的位标依次累积上升。例如有两个坐标为( 0 ,100 ), ( 0 , 120),那么第 一个坐标位置就是( 0 , 100 ) , 第二个就是( 100 , 220 )。而 PercentStack 是把相应的坐标转换成百分比来计算坐标位 置的。例图可以参看本节的前两个图。

基本教程篇--第八节 PieSampleDemo.cs 介绍

这节我把饼形图粗略的介绍一下,如下图。

25 / 33

ZedGraph 属性及基础教程 using System; using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo

{
///<summary> /// Summary description for SimpleDemo. ///</summary> public class PieSampleDemo : DemoBase { public PieSampleDemo() : base( "Code Project Pie Sample","Pie Sample", DemoType.Pie, DemoType.Tutorial ) { GraphPane myPane = base.GraphPane; // Set the GraphPane title myPane.Title = "2004 ZedGraph Sales by Region\n($M)"; myPane.FontSpec.IsItalic = true; myPane.FontSpec.Size = 24f; myPane.FontSpec.Family = "Times"; // Fill the pane background with a color gradient myPane.PaneFill = new Fill( Color.White, Color.Goldenrod, 45.0f ); // No fill for the axis background myPane.AxisFill.Type = FillType.None; // Set the legend to an arbitrary location myPane.Legend.Position = LegendPos.Float ; myPane.Legend.Location = new Location( 0.95f, 0.15f, CoordType.PaneFraction,AlignH.Right, AlignV.Top ); myPane.Legend.FontSpec.Size = 10f; myPane.Legend.IsHStack = false;

// Add some pie slices PieItem segment1 = myPane.AddPieSlice( 20, Color.Navy, Color.White, 45f, 0, "North" ); PieItem segment3 = myPane.AddPieSlice( 30, Color.Purple, Color.White, 45f, .0, "East" ); 26 / 33

ZedGraph 属性及基础教程 PieItem segment4 = myPane.AddPieSlice( 10.21, Color.LimeGreen, Color.White, 45f, 0, "West" ); PieItem segment2 = myPane.AddPieSlice( 40, Color.SandyBrown, Color.White, 45f, 0.2, "South" ); PieItem segment6 = myPane.AddPieSlice( 250, Color.Red, Color.White, 45f, 0, "Europe" ); PieItem segment7 = myPane.AddPieSlice( 50, Color.Blue, Color.White, 45f, 0.2, "Pac Rim" ); PieItem segment8 = myPane.AddPieSlice( 400, Color.Green, Color.White, 45f, 0, "South America" ); PieItem segment9 = myPane.AddPieSlice( 50, Color.Yellow, Color.White, 45f, 0.2, "Africa" );

segment2.LabelDetail.FontSpec.FontColor = Color.Red; // Sum up the pie values CurveList curves = myPane.CurveList ; double total = 0 ; for ( int x = 0 ; x < curves.Count ; x++ ) total += ((PieItem)curves[x]).Value ; // Make a text label to highlight the total value TextItem text = new TextItem( "Total 2004 Sales\n" + "$" + total.ToString () + "M", 0.18F, 0.40F, CoordType.PaneFraction ); text.Location.AlignH = AlignH.Center; text.Location.AlignV = AlignV.Bottom; text.FontSpec.Border.IsVisible = false ; text.FontSpec.Fill = new Fill( Color.White, Color.FromArgb( 255, 100, 100 ), 45F ); text.FontSpec.StringAlignment = StringAlignment.Center ; myPane.GraphItemList.Add( text );

// Create a drop shadow for the total value text item TextItem text2 = new TextItem( text ); text2.FontSpec.Fill = new Fill( Color.Black ); text2.Location.X += 0.008f; text2.Location.Y += 0.01f; myPane.GraphItemList.Add( text2 ); base.ZedGraphControl.AxisChange(); } } 27 / 33

ZedGraph 属性及基础教程

}

代码分析: 我们先把 Legend 类的相关属性再补充一下。 // Set the legend to an arbitrary location
myPane.Legend.Position = LegendPos.Float ; myPane.Legend.Location = new Location( 0.95f, 0.15f, CoordType.PaneFraction,AlignH.Right, AlignV.Top ); myPane.Legend.FontSpec.Size = 10f; myPane.Legend.IsHStack = false;

LegendPos 是一个枚举,共有 13 个枚举值:Top、Left、Right、Bottom、InsideTopLeft、InsideTopRight、In sideBotLeft、InsideBotRight、Float、TopCenter、BottomCenter、TopFlushLeft 和 BottomFlushLeft。 具体含义我就不解释了,都是关于 Legend 位置的。 Location 是指定 Legend 具体坐标的一个类,要注意的是,只有当 LegendPos 是 Float 时,Location 才会起作用。 FontSpec 类就是一个字体类,里面是关于字体的一些相关设置,这里不再细说。 IsHStack 是一个 Legend 的属性,是设置 Legend 中文字和图形的显示方式是水平还是垂直。

下面说说本节的主角 PieItem 类: PieItem segment6 = myPane.AddPieSlice( 250, Color.Red, Color.White, 45f, 0, "Europe" ); Pie 重载了五个构造函数,上面是参数最多的一个构造函数,共有六个,意思分别是:在整个饼形图中占的比重,渐变颜色 1, 渐变颜色 2,渐变颜色角度,远离中心点的距离,饼形图的文字注释。 饼形图也是继承 ZedGraph.CurveItem,与其它继承 CurveItem 不同的是,PieItem 有一个 value 的属性,可以方便的存 取 PieItem 实例的值,从而可以很方便的动态改变一个饼形在整个饼形区域所占的比重。 关于饼形的其它属性和方法的使用,在饼形图那一章再做专门的介绍。

基本教程篇----第九节 MasterSampleDemo.cs 介绍

最近一直挺忙的,都没时间写博客了,好在这是基础篇的最后一篇了,我也可以歇歇了,关于其它的深入章节我会在 以后的时间补上的。 先来看看这一节的示图和源代码吧。

28 / 33

ZedGraph 属性及基础教程

using System; using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo { ///<summary> /// Summary description for SimpleDemo. ///</summary> public class MasterSampleDemo : DemoBase { public MasterSampleDemo() : base( "Code Project MasterPane Sample", "MasterPane Sample", DemoType.Tutorial ) { MasterPane myMaster = base.MasterPane; // Remove the default GraphPane that comes with ZedGraphControl myMaster.PaneList.Clear(); // Set the masterpane title myMaster.Title = "ZedGraph MasterPane Example"; myMaster.IsShowTitle = true;
29 / 33

ZedGraph 属性及基础教程

// Fill the masterpane background with a color gradient myMaster.PaneFill = new Fill( Color.White, Color.MediumSlateBlue, 45.0F ); // Set the margins to 10 points myMaster.MarginAll = 10; // Enable the masterpane legend myMaster.Legend.IsVisible = true; myMaster.Legend.Position = LegendPos.TopCenter; // Add a priority stamp TextItem text = new TextItem( "Priority", 0.88F, 0.12F ); text.Location.CoordinateFrame = CoordType.PaneFraction; text.FontSpec.Angle = 15.0F; text.FontSpec.FontColor = Color.Red; text.FontSpec.IsBold = true; text.FontSpec.Size = 15; text.FontSpec.Border.IsVisible = false; text.FontSpec.Border.Color = Color.Red; text.FontSpec.Fill.IsVisible = false; text.Location.AlignH = AlignH.Left; text.Location.AlignV = AlignV.Bottom; myMaster.GraphItemList.Add( text ); // Add a draf watermarkè text = new TextItem( "DRAFT", 0.5F, 0.5F ); text.Location.CoordinateFrame = CoordType.PaneFraction; text.FontSpec.Angle = 30.0F; text.FontSpec.FontColor = Color.FromArgb( 70, 255, 100, 100 ); text.FontSpec.IsBold = true; text.FontSpec.Size = 100; text.FontSpec.Border.IsVisible = false; text.FontSpec.Fill.IsVisible = false; text.Location.AlignH = AlignH.Center; text.Location.AlignV = AlignV.Center; text.ZOrder = ZOrder.A_InFront;
30 / 33

ZedGraph 属性及基础教程

myMaster.GraphItemList.Add( text ); // Initialize a color and symbol type rotator ColorSymbolRotator rotator = new ColorSymbolRotator(); // Create some new GraphPanes for ( int j=0; j<5; j++ ) { // Create a new graph - rect dimensions do not matter here, since it // will be resized by MasterPane.AutoPaneLayout() GraphPane myPane = new GraphPane( new Rectangle( 10, 10, 10, 10 ), "Case #" + (j+1).ToString(), "Time, Days", "Rate, m/s" ); // Fill the GraphPane background with a color gradient myPane.PaneFill = new Fill( Color.White, Color.LightYellow, 45.0F ); myPane.BaseDimension = 6.0F; // Make up some data arrays based on the Sine function PointPairList list = new PointPairLis_u40 ?); for ( int i=0; i<36; i++ ) { double x = (double) i + 5; double y = 3.0 * ( 1.5 + Math.Sin( (double) i * 0.2 + (double) j ) ); list.Add( x, y ); } // Add a curve to the Graph, use the next sequential color and symbol LineItem myCurve = myPane.AddCurve( "Type " + j.ToString(), list, ro_u97 ?tor.NextColor, rotator.NextSymbol ); // Fill the symbols with white to make them opaque myCurve.Symbol.Fill = new Fill( Color.White ); // Add the GraphPane to the MasterPane myMaster.Add( myPane ); } Graphics g = this.ZedGraphControl.CreateGraphics();
31 / 33

ZedGraph 属性及基础教程

// Tell ZedGraph to auto layout the new GraphPanes myMaster.AutoPaneLayout( g, PaneLayout.ExplicitRow32 ); myMaster.AxisChange( g ); g.Dispose(); } } } 这一节主要是讲多 pane 的创建方法。里面大部分的方法和属性在以前的章节中已经介绍过了,这里只想讲三个地方:Ma sterPane 类、ColorSymbolRotator 类和 ZOrder 这个属性的用法。 首先就是 MasterPane 类。这个类就是创建多 pane 的类,是一个 GraphPane 类的集合。它里面的大部分属性和方法都 继承自 PaneBase 和 Object。像.NET 一样,这个类提供了 Item 和 PaneList 属性来设置和获取里面的成员。在程序中我 们也看到了,其实 MasterPane 什么也没做,就是把其它的类一项项的 Add 进它的集合中。 ColorSymbolRotator 类就是一个为 GraphPane.AddCurve 方法循环提供不同颜色和符号的类。 这个类的东西不多, 我个人认为就相当于一个枚举一样,我们可以看到程序中只用到了 rotator.NextColor rotator.NextSymbol 这两个属性,来 获取不同的颜色和符号。 最后就是 Zorder 这个属性了,在前面的几节中我们也见过这个属性,可是当时我没有讲,现在我说说。Zorder 就是图形 在 Z 轴的位置。如果我们在平面上把左右看成 X 轴,把上下看成 Y 轴,那么内外就是 Z 轴了,也就是 Zorder 就是图形在内外 的位置(这个内外是针对其它图形来说的)。我们可以看看示图中的 DRAFT 这个水印的效果,这就是 Zorder 的功能。如果你把 程序中的 text.ZOrder = ZOrder.A_InFront;改成 text.ZOrder = ZOrder.G_BehindAll; 那么 DRAFT 就是如下的效果了,DRAFT 就在各个 Pane 的下面了。 Zorder 是一个枚举共有七个枚举值。分别是 G_BehindAll、F_BehindAxisFill、E_BehindAxis、D_BehindCurve s、C_BehindAxisBorder、B_BehindLegend 和 A_InFront。

具体的解释如

32 / 33

ZedGraph 属性及基础教程

Member Name

Description

G_BehindAll

Specifies that the GraphItem will be behind all other objects (including the PaneBaseTitle).

指定 GraphItem 将落后于所有其他对象(包括 PaneBase 标题) 。 F_BehindAxisFill
Specifies that the GraphItem will be behind the AxisRect background Fill (see AxisFill).

指定 GraphItem 将背后的 AxisRect 背景 填写 (见 AxisFill ) 。 E_BehindAxis Specifies that the GraphItem will be behind the Axis objects. 指定 GraphItem 将背后的 轴物体。 D_BehindCurves Specifies that the GraphItem will be behind the CurveItem objects. 指定 GraphItem 将背后的 CurveItem 对象。 C_BehindAxisBorder Specifies that the GraphItem will be behind the Axis border. 指定 GraphItem 将背后的 轴边界。 B_BehindLegend Specifies that the GraphItem will be behind the Legend object. 指定 GraphItem 将背后的 传奇 对象。 A_InFront
Specifies that the GraphItem will be in front of all other objects, except for the other GraphItem objects that have the same ZOrder and are before this object in the GraphItemList.

指定 GraphItem 将前面的所有其他对象,除其他 GraphItem 的对象具有相同的 ZOrder , 并在此对象在 GraphItemList 。

33 / 33


相关文章:
ZedGraph的控件使用_图文
下面是这个控件的文档翻译及其基本使 用方法。 A flexible charting library for...执行效果 Enhancing the graph ZedGraph 允许你通过多种途径更改图形的属性,图像...
ZedGraph教程
ZedGraph 是一个非常优秀的开源的作图控件 1、在 vs 中使用 ZedGraph 2、 基本一些概念 几个注意点: 图片的保存路径设置:RenderedImagePath 属性中设置,程序对该...
C#ZedGraph使用
asp_net中zedgraph柱状图... 暂无评价 6页 免费 zedgraph 4页 1下载券 ZedGraph教程 40页 5下载券喜欢此文档的还喜欢 ZedGraph控件属性及基础... 33页 免费 应...
ZedGraph一些参数的含义
ZedGraph教程(En) 43页 1下载券喜欢此文档的还喜欢 ZedGraph介绍 28页 1下载券 ZedGraph控件属性及基础... 33页 免费 ZedGraph控件属性及基础... 33页 1下载券...
图表控件MsChart教程
图表控件MsChart教程_IT/计算机_专业资料。MSChart 报表...我用到开源的控件 ZedGraph.dll,有一些功能限制。如...其它属性 相对来说,我觉得比较有用的属性有三个,...
深入解析NET架构C-Sharp
的定义语 言,,, DotNetAOP 为 CLR language 提供 AOP 框架基础属性. NAop 是...五,图表制作 ZedGraph 是 C#编写的.NET 类库,提供了用户控件和 web 控件.它...
ZedGraph 控件使用示例源代码
ZedGraph控件属性及基础... 33页 免费 应用Zedgraph高效开发数... 4页 免费 C# ZedGraph实时柱图(总... 2页 免费 图表基本教程篇 76页 5下载券 ZedGra...
ZedGraph控件生成饼图、拆线图和柱状图例程
ZedGraph控件属性及基础... 33页 免费Z​e​d​G​r​a​p​h​控​件​生​成​饼​图​、​拆​线​图​和​柱​状...
C# 利用ZedGraph控件画简单折线图示例
C# 利用ZedGraph控件画简单折线图示例_计算机软件及应用_IT/计算机_专业资料。C#...ZedGraph控件属性及基础... 33页 免费 ZedGraph教程 40页 5下载券 应用...
zedGraph绘制实时数据的散点图
/// /// zedgragh 控件刷新线程 /// public void DrawPicture() { while (true) { if (g_cDrawEnable == 1) { zedGraphControl2.Refresh(); } Sys...
更多相关标签:
vb控件大全属性详解 | zedgraph控件 | zedgraph控件下载 | zedgraph 属性 | treeview控件使用详解 | gridview控件使用详解 | wpf控件详解 | vb datagrid控件详解 |