C#下用zedGraph生成大量数据统计图表的方法(通过修改一些源码)
来源:互联网 发布:sql注入 union select 编辑:程序博客网 时间:2024/05/18 02:04
zedGraph是C#下非常优秀的开源的生成统计图表的库,最近需要用zedGraph生成大量数据的图表(数据非常多,图表非常大),遇到了一些问题,通过修改了一些源码实现
zedGraph的源码可以在这里下载,http://dxdown1.onlinedown.net/down/Zegraph.rar,使用时引用zedGraph.dll和zedGraph.Web.dll即可。
zedGraph初始化:
List<string> xtitles = new List<string>(); //xtitles是x轴的数据 this.zedGraphControl1.Size = new Size(xtitles.Count * 20, 700); //根据x轴数据的个数设置宽度 this.zedGraphControl1.GraphPane.Title.FontSpec.Size = 20f; //设置标题字号 this.zedGraphControl1.GraphPane.IsFontsScaled = false; //设置字体不随控件大小而自动缩放 this.zedGraphControl1.GraphPane.XAxis.Type = ZedGraph.AxisType.Text; //设置x轴是字符串 this.zedGraphControl1.GraphPane.XAxis.Scale.TextLabels = xtitles.ToArray(); //设置x轴数据
需要注意的时,如果宽度很大要显示出来,需要设置zedGraph显示x轴的滚动轴,AutoSize设为true,同时在外面放一个panel,设置AutoScroll为true,这样可以滚动显示图表。
画柱状体
List<double> yValues = new List<double(); //y轴的数据string yTitle = "数据“; //x轴的标题GraphPane graphPane = this.zedGraphControl1.GraphPane;BarItem myBar = graphPane.AddBar(yTitle, null, yValues.ToArray(), Color.Blue); //画柱状图myBar.Bar.Fill = new Fill(Color.Blue, Color.White, Color.Blue); //给柱状图设置颜色myBar.Bar.Border.Color = Color.Transparent;
刷新显示图表
this.zedGraphControl1.AxisChange();
保存为png图片
string imageName = "D:\\统计图表.png";RectangleF rect = this.zedGraphControl1.GraphPane.Rect;Bitmap bitmap = new Bitmap((int)rect.Width, (int)rect.Height); using (Graphics bitmapGraphics = Graphics.FromImage(bitmap)) { bitmapGraphics.TranslateTransform(-rect.Left, -rect.Top); this.zedGraphControl1.MasterPane.Draw(bitmapGraphics); }bitmap.Save(imageName, ImageFormat.Png);
遇到的一些问题
1. 设置柱状图的宽度无效
设置this.zedGraphControl1.GraphPane.BarSettings.ClusterScaleWidth = 0.5 无效,可以通过修改源码
在scale.cs中
将return Math.Abs( Transform( basisVal + ( IsAnyOrdinal ? 1.0 : pane._barSettings._clusterScaleWidth ) ) - Transform( basisVal ) );
改为return Math.Abs(Transform(basisVal + (pane._barSettings._clusterScaleWidth)) - Transform(basisVal));
当XAxis.Type为AxisType.Text时,IsAnyOrdinal始终为true, 使得clusterScaleWidth不起作用。
2.大数据 当宽度超过10000时,后面的不会画出来,同时宽度很大时,x轴后面的数据不显示
在Bar.cs中,将
if ( top < -10000 )top = -10000;else if ( top > 10000 )top = 10000;if ( left < -10000 )left = -10000;else if ( left > 10000 )left = 10000;if ( right < -10000 )right = -10000;else if ( right > 10000 )right = 10000;if ( bottom < -10000 )bottom = -10000;else if ( bottom > 10000 )bottom = 10000;中的10000都改为100000
在Scale.cs,CalcNumTics()中将
if ( nTics < 1 )
nTics = 1;
else if ( nTics > 1000 )
nTics = 1000;
中的1000改为10000
在Scale.cs,DrawLabels函数中,
float lastPixVal = -10000;
// loop for each major tic
for ( int i = firstTic; i < nTics + firstTic; i++ )
在这两行中间加上
nTics = 50000;
变为
float lastPixVal = -10000;
// loop for each major tic
nTics = 50000;
for ( int i = firstTic; i < nTics + firstTic; i++ )
PS:这个是胡乱加上的,发现有效,也没出现什么问题
修改源码后,重新编译,将新的zedGraph.dll重新导入即可
3. 尺寸过大,保存为图片时出现error
发现当宽度*高度 大约大于 70000*2500时出现问题,这个是bitmap生成时内存不够,只能控制宽度和高度不要过大
我最后生成的图片最大的是50000*3000,8MB,效果还挺不错的。
- C#下用zedGraph生成大量数据统计图表的方法(通过修改一些源码)
- WPF 自定义的图表(适用大量数据绘制)下
- ZedGraph统计图表控件使用
- 【原】.Net创建Excel文件(插入数据、修改格式、生成图表)的方法
- .Net创建Excel文件(插入数据、修改格式、生成图表)的方法
- 根据数据自动生成的条型统计图表
- WPF 自定义的图表(适用大量数据绘制)
- 用ZedGraph作图表(一)
- 用ZedGraph作图表(二)
- 实现数据的图表统计
- zedgraph的一些基本概念
- ZedGraph图表
- Net使用Microsoft.Office.Interop.Excel;创建Excel文件(插入数据、修改格式、生成图表)的方法,以及Excel查看加密
- C#数据统计方法
- 用jfreechart来生成统计图表
- 用jfreechart来生成统计图表
- 【分享】通过Excel生成批量SQL语句,处理大量数据的好办法
- 通过Excel生成批量SQL语句,处理大量数据的好办法
- android版自定义文件浏览器
- 视图和表的区别
- 盘点开发者最喜爱的十大开源Xcode插件
- 初学Java的人如何建立信心
- 【UML】——概述
- C#下用zedGraph生成大量数据统计图表的方法(通过修改一些源码)
- BestCoder No.15 总结
- 【转】Linux进程状态解析之R、S、D、T、Z、X
- 第237(23W+2)
- NIO 入门
- PHP开发工具(PHP IDE)应具备的几点功能
- 4款交互原型设计工具评测
- 拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
- 博客文章