C# 利用ZedGraph控件画简单折线图示例
官网下载地址 http:///projects/zedgraph/files/ 在控件库中添加ZedGraph控件 右键点击工具箱 - 选择项 - .Net Framework 组件 - 浏览 - 找到ZedGraph.dll 和ZedGraph.Web.dll添加 zedGraphControl 控件就出现在工具箱中 public Form1() { InitializeComponent(); createPane(zedGraphControl1); } public void createPane(ZedGraphControl zgc) { GraphPane myPane = zgc.GraphPane;
//设置图标标题和x、y轴标题 myPane.Title.Text = "机票波动情况"; myPane.XAxis.Title.Text = "波动日期"; myPane.YAxis.Title.Text = "机票价格";
//更改标题的字体 FontSpec myFont = new FontSpec("Arial", 20, Color.Red, false, false, false); myPane.Title.FontSpec = myFont; myPane.XAxis.Title.FontSpec = myFont; myPane.YAxis.Title.FontSpec = myFont;
// 造一些数据,PointPairList里有数据对x,y的数组 Random y = new Random(); PointPairList list1 = new PointPairList(); for (int i = 0; i < 36; i++) { double x = i; //double y1 = 1.5 + Math.Sin((double)i * 0.2); double y1 = y.NextDouble() *1000; list1.Add(x, y1); //添加一组数据 }
// 用list1生产一条曲线,标注是“东航” LineItem myCurve = myPane.AddCurve("东航",list1, Color.Red,SymbolType.Star);
//填充图表颜色 myPane.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 45.0f);
//以上生成的图标X轴为数字,下面将转换为日期的文本 string[] labels = new string[36]; for (int i = 0; i < 36; i++) { labels[i] = System.DateTime.Now.AddDays(i).ToShortDateString(); } myPane.XAxis.Scale.TextLabels = labels; //X轴文本取值 myPane.XAxis.Type = AxisType.Text; //X轴类型
//画到zedGraphControl1控件中,此句必加 zgc.AxisChange();
//重绘控件 Refresh(); }
在图上点位标注数字的方法: http://blog.csdn.net/dengta_snowwhite/archive/2011/01/12/6131265.aspx 如果想在显示的点位上将数值标注上去,只需在程序中加上: // 点位和标注的偏置
效果如下: http://www./csharpspace/3701r5418.shtml 用定时器超时来刷新数据,实现“连续”的图形输出。 1. 新建图像面板 GraphPane myPane = zedGraphControl1.GraphPane; 2. 初始化图像、坐标轴标题 myPane.Title.Text = “”; myPane.XAxis.Title.Text = ""; myPane.YAxis.Title.Text = ""; 3. 新建RollingPointPairList滚动数据对用于存放实时显示的数据(应大于滚动区域内所有采样点数之和,尽量稍微偏大些) RollingPointPairList list = new RollingPointPairList( 1200 ); 4. 新建并初始化曲线 LineItem curve = myPane.AddCurve(string label, IPointList points, Color color, SymbolType symbolType); 5. 设置定时器,并启动 timer1.Interval =1; timer1.Enabled = true; timer1.Start(); 6. 设定面板X轴的范围和主标、副标(同时也可以设定Y轴) myPane.XAxis.Scale.Min = 0; myPane.XAxis.Scale.Max = 30; myPane.XAxis.Scale.MinorStep = 1; myPane.XAxis.Scale.MajorStep = 5; 7. 用zedGraphControl1.AxisChange();来调整X轴 8. 获取当前环境tick数 tickStart = Environment.TickCount; 定时器超时函数: 1. 如果当前面板曲线数为零,返回 zedGraphControl1.GraphPane.CurveList.Count <= 0 2. 新建曲线,如果面板曲线为空,则返回 LineItem curve = zedGraphControl1.GraphPane.CurveList[0] as LineItem; as运算符将类型检查和强制转换合二为一,妙! 3. 获取曲线上的点集合,如果没有则返回 IPointListEdit list = curve.Points as IPointListEdit; 4. 获取当前时间,向刚才的点集合中添加当前点 double time = ( Environment.TickCount - tickStart ) / 1000.0; list.Add( time, Math.Sin( 2.0 * Math.PI * time / 3.0 ) ); 5. 新建坐标尺度 Scale xScale = zedGraphControl1.GraphPane.XAxis.Scale; 6. 保持X轴上25秒的显示范围,总共标注范围是30秒 if ( time > xScale.Max - xScale.MajorStep ) { xScale.Max = time + xScale.MajorStep; xScale.Min = xScale.Max - 30.0; } 7. 调整坐标轴 zedGraphControl1.AxisChange(); 8. 使控件的整个图面无效并导致重绘控件 zedGraphControl1.Invalidate();
当调整窗口时: 1. 新建一个矩形,并指向当前矩形 Rectangle formRect = this.ClientRectangle; 2. 指定放大量 formRect.Inflate( 0, 0); 3. 调整大小 if ( zedGraphControl1.Size != formRect.Size ) { zedGraphControl1.Location = formRect.Location; zedGraphControl1.Size = formRect.Size; } |
|