[转载]技术宅:VB.net Chart控件绘制数据图表
貌似在VB6时代就出现了MSChart控件,利用Excel的内核来绘制简单的统计图。记得当年好像必须要绑定数据控件,从SQL或者Access中绑定数据,麻烦无比,从来没搞明白过。到了.net framework 4.0时代(VB.net 2010),这个控件直接集成进来了,称为Chart控件,据说方便了很多,可以直接用程序往里面很方便地加数据点。网上的各种教程相当的少,因此自己参照了许多教程来编了个简单的程序。在这里总结一下学习心得。
在这个控件内,分为几个层次:
一个Chart控件内可以包含若干个ChartArea,每个ChartArea相当于一个图、一个坐标轴(类似MATLAB里面的subplot的概念)
一个ChartArea里面有若干个Series,就是数据系列(套用Excel里面的概念),例如一组直方图的数据就是一个Series,一条折线数据也是一个Series
下图可以说明这种包含关系:
上图中所有的东西都是可以设置的,因此全部命令巨复杂无比,但知道了各种对象的包含关系,就可以很容易地在帮助里面找到了。
这里是一个简单的示例:http://jzcqx.blog.163.com/blog/static/31170512009813017295/
下面以我编的一段程序来说明:
'绘制柱形图
Chart1.ChartAreas.Clear()
Dim ChartAreas1 As New ChartArea("Read length") '定义新的ChartArea
Chart1.ChartAreas.Add(ChartAreas1) '将新定义的ChartArea加入Chart1
Chart1.ChartAreas(0).AxisX.Title = "Length (nt)" '设置ChartArea里坐标轴标题
Chart1.ChartAreas(0).AxisY.Title = "Read count"
Chart1.Series.Clear()
Dim series1 As New Series("Read Count")
series1.ChartType = SeriesChartType.Column '设置Series的绘图类型
Chart1.Series.Add(series1)
For i = minlen To maxlen
Chart1.Series("Read Count").Points.AddXY(i, l(i)) '为这个Series加数据点
Next
Chart1.Legends(0).Docking = Docking.Top '调整图例的位置
很简单,也很朴实,但让人看着也算心旷神怡和一目了然,最重要的是避免了写大量代码用于坑爹的坐标变换和坐标轴自适应。
下面再来说说如何将绘制的数据图表保存起来。Chart对象有一个方法叫SaveImage,直接就能将图表存为BMP,JPG,PNG,TIF等位图格式,更重要的是还能直接存成EMF格式的矢量图!这样就不怕后期放大了。
命令嘛,很简单:
Chart1.SaveImage(SaveFileDialog1.FileName, ChartImageFormat.Png)
当然,真要输出很精美的图表,还是建议把数据输出到Excel或者MATLAB里面去慢慢调整。VB.NET里面随便画一下,只不过是为了方便分析数据时简单直观地预览数据分布而已。