[转载]技术宅:VB.net Chart控件绘制数据图表

用VB.net编程序的时候,绘制数据图表一直是一个令人头疼的事情。用graphics方法一条一条线的画,程序极其繁琐,光是坐标变换就搞死人了。当然,输出一些比较特殊的图形的时候这是唯一的方法,但是如果只想要画个直方图或者折线图什么的真是杀鸡用牛刀。

貌似在VB6时代就出现了MSChart控件,利用Excel的内核来绘制简单的统计图。记得当年好像必须要绑定数据控件,从SQL或者Access中绑定数据,麻烦无比,从来没搞明白过。到了.net framework 4.0时代(VB.net 2010),这个控件直接集成进来了,称为Chart控件,据说方便了很多,可以直接用程序往里面很方便地加数据点。网上的各种教程相当的少,因此自己参照了许多教程来编了个简单的程序。在这里总结一下学习心得。

首先,就是在窗体上加一个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里面随便画一下,只不过是为了方便分析数据时简单直观地预览数据分布而已。

(0)

相关推荐