在我们编写程序的时候,有时候是要做一些统计的,为了达到一目了然的效果,饼状图,曲线图,柱状图都是很好的表现统计的直观形式。这个时候,ZedGraph控件给我们带来了极大的方便。
1.下载ZedGraph.dll
2.在项目中引用这个控件 (: 首先,在项目解决方案里添加,然后在工具箱中点击右键,选择项,COM,浏览,打开,我们就 会在工具箱的最下方发现这个控件了,确定。然后就可以在一个WINFORM中直接加入这个控件(在FORM上就出现了了图 了),具体的统计数据我们是在其添加X,Y坐标时候处理的。如:
double Y=(double)(Convert.ToDouble(tem1[i])); double X=(double)i; temlist.Add(X,Y); //这里,是已经定义了GraphPane,PointPairList
gridview结合Zedgraph使用用法http://www.cnblogs.com/levin9/articles/859476.html
ZedGraph类库介绍http://blog.csdn.net/tjvictor/category/257827.aspx
介绍和简单的操作手册:http://www.codeproject.com/csharp/zedgraph.asp代码例子:http://zedgraph.org/wiki/index.php?title=Sample_Graphs整体介绍:http://zedgraph.org/wiki/index.php?title=Main_Page操作手册(官网):http://zedgraph.org/wiki/index.php?title=How_Do_I%3F中文网站:(这个不好,是在线翻译过来的,看着比较累)http://202.165.104.75/babelfish/translate_url_content?lp=en_zh&trurl=http%3a%2f%2fzedgraph.org%2fwiki
还有这个,使用帮助:http://www.codeproject.com/KB/graphics/zedgraph.aspx
附:在vs中使用ZedGraph控件的一些记录(转)
几个注意点:
图片的保存路径设置:RenderedImagePath 属性中设置,程序对该文件夹应该是有写和修改权限的
图片的输出格式:OutputFormat 属性中设置,Png 的推荐,比较清晰。
Chart
ChartBorder图表区域的边框设置 ChartFill图表区域的背景填充 Legend图表的注释标签显示设置项目,一组数据对应一种颜色的注释 IsHStack当有多个显示项的时候设置 Y 轴数据是叠加的还是分开的 Xaxis图表区域的 X 轴相关信息设置 AxisColor坐标轴颜色 Cross坐标的原点,可以设置坐标的偏移程度 CrossAuto原点自动设置:True 的话 Cross 的设置就无效了。 FontSpecX 轴标题字体相关信息 AngleX 轴标题字体显示时候的角度,0为水平 90为垂直 FillX 轴标题字体填充信息 ColorOpacity透明度 IsScaled设置 X 轴标题字体显示大小是否根据图的比例放大缩小 RangeMax填充时候的最大倾斜度(有过渡色,没试过) RangeMin 填充时候的最小倾斜度(有过渡色,没试过) StringAlignmentX 轴标题字体排列(不清楚,没试过) IsOmitMag是否显示指数幂(10次方,没试过,似乎与 IsUseTenPower 有关系) IsPreventLabelOverlap坐标值显示是否允许重叠,如果False的话,控件会根据坐标值长度自动消除部分坐标值的显示状态 IsShowTitleX 轴标题是否显示 IsTicsBetweenLabels两个坐标值之间是否自动显示分隔标志 IsUseTenPower是否使用10次幂指数 IsZeroLine当数据为0时候是否显示(在饼状图显示的时候有用) IsVisible是否显示 X 轴 MajorGrid 大跨度的 X 轴表格虚线线显示信息 DashOff虚线中孔间距 DashOn虚线单位长度 MajorTic大跨度的 X 轴刻度信息 IsInside在 Chart 内部是否显示 IsOutSide在 Chart 外部是否显示 IsOpposite在对面的轴上是否显示 MinorGrid小跨度的 X 轴表格虚线显示信息 MinorTic小跨度的 x 轴刻度信息 MinSpace 刻度和轴之间的距离(没试过) Scale刻度值的一些设定 IsReverseX 轴的刻度值从高到低还是从低到高 MajorStep大刻度步长 MajorStepAuto是否自动设置大刻度步长 MajorUnit大刻度步长单位 Max刻度最大值 MaxAuto根据输入数据自动设置刻度最大值 Min刻度最小值 MinAuto根据输入数据自动设置刻度最小值 MinGrace不清楚,没试过 MinorStep小刻度步长 MinorStepAuto是否自动设置小刻度步长 MinorUnit小刻度单位 Type数据显示方式 Liner直接现实(自动) Date按日期方式显示 Log按指数幂方式显示 Ordinal顺序显示 Y2Axis第二个 Y 轴坐标信息显示(具体设置看 X 轴) Yaxis第一个 Y 轴坐标信息显示(具体设置看 X 轴) BarBase在生成柱状图的时候设置柱状是基于 X 轴还是其他轴 BarType柱状的类型叠加或其他。 IsFontsScaled图比例变化时候图表上的文字是否跟着自动缩放 IsIgnoreInitial是否忽略初始值 IsIgnoreMissing是否忽略缺省值 IsPenWidthScaled图比例变化时候图表上的画笔的粗细是否跟着自动缩放 IsShowTitle图表标题是否显示 PaneFill Pane 的一些填充信息 BaseDimension缩放比例基数(可以试试效果) IsImageMap不清楚干吗用的 AxisChaneged是否允许自动绘图(没试过,一般都 true,动态绘图) CacheDuration Cache 保存时间0OutputFormat输出格式 RenderedImagePath输出路径 RenderMode输出模式,不太清楚一般都是 ImageTag,另一个输出的是乱码不是图片。对于图表而言,一般是三种表现形式:柱状图、饼状图和点线图。
//---------------------------------------------------代码-------------------------------------------------------------
/// <summary> /// 得到统计数据 /// </summary> private double[] getData(string queryDate, int baseStationId, int faultType) { double[] d=_objWebService.GetFaultNum(queryDate, baseStationId, faultType); return d; } #region 折线图 /// <summary> /// 故障统计折线图 /// </summary> /// <param name="zg1"></param> /// <param name="queryDate"></param> /// <param name="baseStationId"></param> /// <param name="faultType"></param> private void CreateGraph1(ZedGraphControl zg1, string queryDate, int baseStationId, int faultType) { GraphPane myPane = zg1.GraphPane; //清空绘制区 myPane.CurveList.Clear(); myPane.GraphObjList.Clear();
myPane.Title.Text = "故障统计折线图"; myPane.XAxis.Title.Text = "年份"; myPane.YAxis.Title.Text = "故障次数"; myPane.XAxis.IsVisible = true; myPane.YAxis.IsVisible = true; //myPane.XAxis.Type = ZedGraph.AxisType.Linear;
string[] labels = { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" }; double[] y = this.getData(queryDate, baseStationId, faultType);
LineItem myCurve = myPane.AddCurve(null, null, y, Color.Red, SymbolType.Diamond); myCurve.Line.Fill = new Fill(Color.White, Color.LightSkyBlue, -45F);
myPane.XAxis.Scale.TextLabels = labels; myPane.XAxis.Type = AxisType.Text; myPane.YAxis.Scale.MajorStep = 10; myPane.YAxis.Scale.Max = 100; myPane.Chart.Fill = new Fill(Color.White, Color.FromArgb(255, 255, 166), 90F); myPane.Fill = new Fill(Color.FromArgb(250, 250, 255)); zg1.AxisChange(); zg1.Refresh(); } #endregion
#region 柱状图 /// <summary> /// 柱状图 /// </summary> /// <param name="zg1"></param> /// <param name="queryDate"></param> /// <param name="baseStationId"></param> /// <param name="faultType"></param> private void CreateGraph2(ZedGraphControl zg1, string queryDate, int baseStationId, int faultType) { GraphPane myPane = zg1.GraphPane; //清空绘制区 myPane.CurveList.Clear(); myPane.GraphObjList.Clear();
myPane.Title.Text = "故障统计柱状图"; myPane.XAxis.Title.Text = "年份"; myPane.YAxis.Title.Text = "故障次数"; myPane.XAxis.IsVisible = true; myPane.YAxis.IsVisible = true; //myPane.XAxis.Type = ZedGraph.AxisType.Linear;
string[] labels = { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" }; double[] y = this.getData(queryDate, baseStationId, faultType);
BarItem myBar = myPane.AddBar(null, null, y, Color.Red); myBar.Bar.Fill = new Fill(Color.Red, Color.White, Color.Red);
//myPane.XAxis.MajorTic.IsBetweenLabels = true;
myPane.XAxis.Scale.TextLabels = labels; myPane.XAxis.Type = AxisType.Text; myPane.YAxis.Scale.MajorStep = 10; myPane.YAxis.Scale.Max = 100; myPane.Chart.Fill = new Fill(Color.White,Color.FromArgb(255, 255, 166), 90F); myPane.Fill = new Fill(Color.FromArgb(250, 250, 255)); zg1.AxisChange(); zg1.Refresh(); }
#endregion
#region 饼状图 private List<Color> defaultColors = new List<Color>();
private void InitDefaultColors() { defaultColors.Add(Color.Red); defaultColors.Add(Color.Green); defaultColors.Add(Color.Blue); defaultColors.Add(Color.Yellow); defaultColors.Add(Color.YellowGreen); defaultColors.Add(Color.Brown); defaultColors.Add(Color.Aqua); defaultColors.Add(Color.SaddleBrown); defaultColors.Add(Color.DarkSeaGreen); defaultColors.Add(Color.Indigo); defaultColors.Add(Color.SlateBlue); defaultColors.Add(Color.SeaShell); }
/// <summary> /// pie graph /// </summary> /// <param name="zg1"></param> /// <param name="queryDate"></param> /// <param name="baseStationId"></param> /// <param name="faultType"></param> private void CreateGraph3(ZedGraphControl zg1, string queryDate, int baseStationId, int faultType) { InitDefaultColors();
GraphPane myPane = zg1.GraphPane; //清空绘制区 myPane.CurveList.Clear(); myPane.GraphObjList.Clear();
myPane.Title.Text = "故障统计饼图"; myPane.XAxis.IsVisible = false; myPane.YAxis.IsVisible = false; myPane.Fill = new Fill(Color.Cornsilk); myPane.Chart.Fill = new Fill(Color.Cornsilk); myPane.Legend.Position = LegendPos.Right;
string[] labels = { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" }; double[] y = this.getData(queryDate, baseStationId, faultType);
for (int i = 0; i < labels.Length; i++) { PieItem segment = myPane.AddPieSlice(y[i], defaultColors[i], Color.White, 45f, 0, labels[i]); segment.LabelType = PieLabelType.Name_Percent; } zg1.AxisChange(); zg1.Refresh(); } #endregion
来自: http://hi.baidu.com/zhangyanxia686/blog/item/005cd8fa019c801b6d22ebcc.html