




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 数据图表系统开发大纲 VB.NET数据图表系统的相关技术 使用GDI+绘制简单的图 使用dotnetCHARTING数据图表系统绘制柱状图、饼图和折线图 使用ZedGraph数据图表系统绘制各种图 生成Word数据图表系统7.1 VB.NET7.1 VB.NET数据图表简介数据控件与水晶报表是数据库表显示的一个格式。除此之外,VB.NET还支持多种数据图表显示格式,常见的包括:GDI(Graphic Device Interface,图形设备接口)数据图表系统、GDI+数据图表系统、dotnetCHARTING数据图表系统、ZedGraph数据图表系统和Word数据图表系统。为了在Wi
2、ndows操作系统上作画,微软创造了图形设备接口,简称为GDI,它是类、函数、变量和常量的集合,或者说是在应用程序中绘画所需要的绝大部分对象。GDI由已安装在计算机中的GDI.DLL动态库来提供。GDI+是Windows系列操作系统用来执行绘画及其他相关图形操作的子系统。操作系统Windows XP和Windows Server 2003以及以上的版本中,GDI+已经替换掉GDI。GDI+中的+表示相对于GDI来说,有很大的改进,增加了新的特点。GDI+允许创建独立于设备的应用程序,不用考虑应用程序将在什么样的硬件上运行。7.1 VB.NET7.1 VB.NET数据图表简介dotnetCHAR
3、TING是.NET图表控件,对中文支持非常好,而且操作方便开发快速,既支持WebForm也支持WinForm,官方地址是http:/ GDI+7.2 GDI+数据图表系统GDI+提供了对各种图形绘制的支持,是对GDI的改进,也是.NET框架结构的重要组成部分。GDI+提供了一个抽象层,隐藏了不同视频卡之间的区别,直接调用Windows API函数完成指定的任务。GDI+使应用程序所使用的打印机与屏幕一样,如果要打印某些东西,而不是显示它们,只需指定输出的设备是打印机,再用相同的方式调用相同的Windows API函数即可。GDI+为.NET系统提供了良好的支持,提供了多个命名空间,可以在程序中
4、调用并使用提供的各种类。 GDI + GDI +命名空间 GDI + GDI +命名空间 常用的类几乎都包含在System.Drawing命名空间中。在GDI+中,大多数绘图工作都是调用Graphics实例的方法完成的,它负责处理大多数绘图操作。画饼图的思路:先画一个椭圆,然后在椭圆内部进行分块,并填充不同的颜色,这样一个简单饼图就完成了。建立工程Proj7-1并引入GDI+的命名空间“System.Drawing”。GDI+画饼图案例名称:案例名称:GDI+画饼图画饼图工程名称:工程名称:Proj7-1Imports System.DrawingPublic Class Form1 Priv
5、ate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 定义一块区域 Dim image As New Bitmap(350, 200) Dim g As Graphics = Graphics.FromImage(image) g.Clear(Color.White) Dim outline As New Rectangle(10, 5, 300, 100) 绘制图片 g.DrawEllipse(New Pen(Color.Black, 8.0F),
6、outline) g.FillPie(New SolidBrush(Color.Red), outline, -20.0F, 120.0F) g.FillPie(New SolidBrush(Color.Yellow), outline, 100.0F, 120.0F) g.FillPie(New SolidBrush(Color.Blue), outline, 220.0F, 100.0F) g.FillPie(New SolidBrush(Color.Green), outline, 320.0F, 40.0F) 显示并输出 Me.BackgroundImage = image Me.Ba
7、ckgroundImageLayout = ImageLayout.Center image.Save(mypie.jpg) End SubEnd ClassGDI+画饼图 7.3 7.3 dotnetCHARTINGdotnetCHARTING数据图表系统dotnetCHARTING特点是水晶式效果,外观非常漂亮,而且附带了各种效果的示例代码。dotnetCHARTING在生成统计图的时候需要设置一个临时目录,用来保存生成统计图的图片,dotnetCHARTING的图表效果好,很大程度上是因为它生成了图片,然后将其显示在界面上。因为是静态图片,因此图表系统不支持缩放。如果对性能要求不高,do
8、tnetCHARTING是非常好的选择。7.3.1 7.3.1 绘制柱状图dotnetCHARTING针对WinForm和WebForm有不同的类库,编写窗口程序使用WinForm类库。dotnetCHARTING以动态链接库形式提供,如图7-2所示。为了在程序中使用相关类,需要引入dotnetCHARTING命名空间,在主菜单“项目”中选择“添加引用”,在选项卡“浏览”中将文件“dotnetCharting.WinForms.dll”添加到工程中。在程序中首先添加一个比较通用的绘图类ShowData。为了在程序中使用相关类,需要引入dotnetCHARTING命名空间,在主菜单“项目”中选择
9、“添加引用”,在选项卡“浏览”中将文件“dotnetCharting.WinForms.dll”添加到工程中。在程序中首先添加一个比较通用的绘图类ShowData。绘制柱状图 案例名称:案例名称:dotnetCHARTING绘制图表绘制图表工程名称:工程名称:Proj7-2Class ShowData 属性 Private _phaysicalimagepath As String 图片存放路径 Private _title As String 图片标题 Private _xtitle As String 图片x坐标名称 Private _ytitle As String 图片y坐标名称 Pr
10、ivate _seriesname As String 图例名称 Private _picwidth As Integer 图片宽度 Private _pichight As Integer 图片高度 Private _dt As DataTable 图片数据源 Public Property PhaysicalImagePath() As String Get Return _phaysicalimagepath End Get绘制柱状图 7.3.2 7.3.2 绘制饼图在绘制柱状图程序的基础上,只要调用“show.CreatePie(Chart1)”函数就可以绘制饼图7.3.3 7.3.3
11、 绘制折线图案例名称:案例名称:dotnetCHARTING绘制图表绘制图表工程名称:工程名称:Proj7-2 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim show As New ShowData() show.Title = 平方根表 show.XTitle = 整数 show.YTitle = 整数的平方根 show.PicHight = 300 show.PicWidth = 600 show.SeriesNa
12、me = 值 show.PhaysicalImagePath = ChartImages Dim mydt As New DataTable(Squares) Dim mydr As DataRow Dim i As Integer mydt.Columns.Add(New DataColumn(数字, GetType(Integer) mydt.Columns.Add(New DataColumn(开根, GetType(Integer) For i = 0 To 10 mydr = mydt.NewRow() mydr(0) = i mydr(1) = Math.Sqrt(i) mydt.
13、Rows.Add(mydr) Next show.dt = mydt show.CreateLine(Chart1) End Sub7.4 ZedGraph7.4 ZedGraph数据图表系统ZedGraph最大的特点是开源,可以修改源代码以适应自己的需求,例如:ZedGraph在画线型图的时候,线条没有使用抗锯齿,只要修改Line类的Default结构中的默认设置就可以了。和dotnetCHARTING相比,ZedGraph的效果要稍微差一些。由于ZedGraph是使用GDI+直接进行描画,所以性能得到了保证,如果改变坐标轴的刻度,和dotnetCHARTING相比,ZedGraph的反应速
14、度要快很多。基于此,ZedGraph提供了很重要的缩放和拖动功能,可以通过鼠标滚轮进行方法,缩小图表,可以通过鼠标中键来拖动,非常方便。7.4 ZedGraph7.4 ZedGraph数据图表系统对于类似股市的实时走势,CPU使用率等实时变化的数据,使用ZedGraph也可以很方便地作到。ZedGraph在基于PointPairList作画,所以你只要在PointPairList这个集合中添加新的数据,然后进行重画就可以实现。总的来说,dotnetCHARTING生成的图表效果好,但是性能方面较差,对实时要求强的需求不适应。ZedGraph开源,效果比起dotnetCHARTING差,但是性能
15、好,能适应有实时要求的数据。ZedGraph和dotnetCHARTING也提供一个DLL文件,名称是:“ZedGraph.dll”,使用步骤和dotnetCHARTING也一样。 7.4 ZedGraph7.4 ZedGraph数据图表系统7.4.1 7.4.1 绘制横柱状图新建工程Proj7-3,在程序中添加WebGraphControl控件,同时通过“添加引用”将ZedGraph.dll加入,在From窗体上添加ZedGraphControl控件,在工程中添加6个按钮,分别绘制不同的图形,第一个按钮绘制横柱状图。案例名称:绘制横柱状图案例名称:绘制横柱状图工程名称:工程名称:Proj7-
16、3Imports ZedGraphImports System.DrawingPublic Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myPane As GraphPane = ZedGraphControl1.GraphPane myPane.Title.Text = 标题 myPane.YAxis.Title.Text = Y轴说明 myPane.XAxis.Title.Text = X
17、轴说明 Dim labels() As String = 100, 230, 42, 40, 80, 10, 75 Dim x() As Double = 40, 300, 115, 75, 22, 98, 40 Dim x2() As Double = 120, 175, 95, 57, 113, 110 Dim x3() As Double = 204, 192, 119, 80, 134, 156 Dim myCurve As BarItem = myPane.AddBar(Here, x, Nothing, Color.Red) myCurve.Bar.Fill = New Fill(
18、Color.Red, Color.White, Color.Red, 90.0F) myCurve = myPane.AddBar(There, x2, Nothing, Color.Blue) myCurve.Bar.Fill = New Fill(Color.Blue, Color.White, Color.Blue, 90.0F) myCurve = myPane.AddBar(Elsewhere, x3, Nothing, Color.Green) myCurve.Bar.Fill = New Fill(Color.Green, Color.White, Color.Green, 90
19、.0F) myPane.YAxis.MajorTic.IsBetweenLabels = True myPane.YAxis.Scale.TextLabels = labels myPane.YAxis.Type = AxisType.Text myPane.BarSettings.Type = BarType.Stack myPane.BarSettings.Base = BarBase.Y myPane.Chart.Fill = New Fill(Color.White, _ Color.FromArgb(255, 255, 166), 45.0F) ZedGraphControl1.Ax
20、isChange() SetSize()End SubPrivate Sub SetSize() ZedGraphControl1.Location = New Point(10, 10) ZedGraphControl1.Size = New Size(ClientRectangle.Width - 40, ClientRectangle.Height - 40)End Sub7.4.1 7.4.1 绘制横柱状图7.4.2 7.4.2 绘制竖柱状图案例名称:绘制竖柱状图案例名称:绘制竖柱状图工程名称:工程名称:Proj7-3 Private Sub Button2_Click(ByVal s
21、ender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim myPane As GraphPane = ZedGraphControl1.GraphPane myPane.Title.Text = 消费者学历统计 设计图表的标题 myPane.XAxis.Title.Text = 学历类型 X轴标题 myPane.YAxis.Title.Text = 人数 Y轴标题 Dim list As New PointPairList() Dim x As Integer For x = 0 To 10 纵
22、坐标的值 Randomize() Dim y As Single = CInt(Int(100 * Rnd() + 1) list.Add(x, y) Next Dim myCurve = myPane.AddBar(数据统计, list, Color.Green) myCurve.Bar.Fill = New Fill(Color.Green, Color.Green, Color.Green) Dim labels(10) As String Dim i As Integer For i = 0 To 10 横坐标文字 labels(i) = i.ToString() Next myPan
23、e.XAxis.Scale.TextLabels = labels myPane.XAxis.Type = AxisType.Text myPane.Fill = New Fill(Color.White, Color.FromArgb(200, 200, 255), 45.0F) myPane.Chart.Fill = New Fill(Color.White, Color.White, 45.0F) ZedGraphControl1.AxisChange() SetSize() End Sub7.4.3 7.4.3 绘制实心双线图案例名称:绘制实心双线图案例名称:绘制实心双线图工程名称:工
24、程名称:Proj7-3 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim myPane As GraphPane = ZedGraphControl1.GraphPane myPane.Title.Text = 标题 myPane.YAxis.Title.Text = Y轴说明 myPane.XAxis.Title.Text = X轴说明 Dim list As New PointPairList() Dim list2
25、As New PointPairList() Dim i As Integer, x As Double, y As Double, y2 As Double For i = 0 To 35 x = New XDate(2010, i + 1, 1) y = Math.Sin(i * Math.PI / 15.0) y2 = 2 * y list.Add(x, y) list2.Add(x, y2) Next i Dim myCurve2 As LineItem = myPane.AddCurve(My Curve 2, list, Color.Blue, _ SymbolType.Circl
26、e) myCurve2.Line.Fill = New Fill(Color.White, Color.Red, 45.0F) myCurve2.Symbol.Fill = New Fill(Color.White) Dim myCurve As LineItem = myPane.AddCurve(My Curve, _ list2, Color.MediumVioletRed, SymbolType.Diamond) myCurve.Line.Fill = New Fill(Color.White, Color.Green) myCurve.Symbol.Fill = New Fill(C
27、olor.White) myPane.XAxis.Type = AxisType.Date myPane.XAxis.CrossAuto = True myPane.Chart.Fill = New Fill(Color.White, Color.LightGoldenrodYellow, 45.0F) ZedGraphControl1.AxisChange() SetSize() End Sub7.4.3 7.4.3 绘制实心双线图7.4.4 7.4.4 绘制饼图案例名称:绘制饼图案例名称:绘制饼图工程名称:工程名称:Proj7-3 Private Sub Button4_Click(ByV
28、al sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim myPane As GraphPane = ZedGraphControl1.GraphPane myPane.Title.Text = 饼图 myPane.Title.FontSpec.IsItalic = True myPane.Title.FontSpec.Size = 24.0F myPane.Title.FontSpec.Family = 饼图 myPane.Fill = New Fill(Color.White, Co
29、lor.Goldenrod, 45.0F) myPane.Chart.Fill.Type = FillType.None Dim segment1 As PieItem = myPane.AddPieSlice(20, Color.Navy, _ Color.White, 45.0F, 0, North) Dim segment3 As PieItem = myPane.AddPieSlice(30, Color.Purple, _ Color.White, 45.0F, 0.0, East) Dim segment4 As PieItem = myPane.AddPieSlice(20, C
30、olor.LimeGreen, _ Color.White, 45.0F, 0, West) Dim segment2 As PieItem = myPane.AddPieSlice(40, Color.SandyBrown, _ Color.White, 45.0F, 0.2, South) Dim segment6 As PieItem = myPane.AddPieSlice(250, Color.Red, _ Color.White, 45.0F, 0, Europe) Dim segment7 As PieItem = myPane.AddPieSlice(50, Color.Blu
31、e, _ Color.White, 45.0F, 0.2, Pac Rim) Dim segment8 As PieItem = myPane.AddPieSlice(400, Color.Green, _ Color.White, 45.0F, 0, South America) Dim segment9 As PieItem = myPane.AddPieSlice(50, Color.Yellow, _ Color.White, 45.0F, 0.2, Africa) Dim curves As CurveList = myPane.CurveList Dim total As Doub
32、le = 0, i As Integer Dim pie As PieItem For i = 0 To curves.Count - 1 pie = curves(i) total += pie.Value Next i Dim text As New TextObj(Total 2004 Sales + Chr(10) + $ + _ total.ToString() + M, 0.18F, 0.4F, CoordType.PaneFraction) text.Location.AlignH = AlignH.Center text.Location.AlignV = AlignV.Bot
33、tom text.FontSpec.Border.IsVisible = False text.FontSpec.Fill = New Fill(Color.White, Color.FromArgb(255, 100, 100), 45.0F) text.FontSpec.StringAlignment = StringAlignment.Center myPane.GraphObjList.Add(text) Dim text2 As New TextObj(text) text2.FontSpec.Fill = New Fill(Color.Black) text2.Location.X
34、 += 0.008F text2.Location.Y += 0.01F myPane.GraphObjList.Add(text2) ZedGraphControl1.AxisChange() SetSize() End Sub绘制饼图 7.4.5 7.4.5 绘制分段柱状图案例名称:绘制分段柱状图案例名称:绘制分段柱状图工程名称:工程名称:Proj7-3 Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim myPane
35、As GraphPane = ZedGraphControl1.GraphPane myPane.Title.Text = 标题 myPane.YAxis.Title.Text = Y轴说明 myPane.XAxis.Title.Text = X轴说明 Dim list As New PointPairList Dim rand As New Random For i As Integer = 0 To 10 Dim x As Double = CDbl(i) + 1 Dim y As Double = rand.NextDouble() * 1000 Dim z As Double = i
36、/ 4.0 list.Add(x, y, z) Next Dim mycurve As BarItem = myPane.AddBar(0, list, Color.Black) Dim colors As Color() = Color.Red, Color.Yellow, Color.Green, Color.Blue, Color.Black mycurve.Bar.Fill = New Fill(colors) mycurve.Bar.Fill.Type = FillType.GradientByZ mycurve.Bar.Fill.RangeMin = 0 mycurve.Bar.F
37、ill.RangeMax = 3 Dim list1 As New PointPairList Dim rand1 As New Random For i As Integer = 0 To 10 Dim x As Double = CDbl(i) + 1 Dim y As Double = rand1.NextDouble() * 1000 Dim z As Double = i / 4.0 list1.Add(x, y, z) Next mycurve = myPane.AddBar(1, list1, Color.DarkGreen) myPane.BarSettings.Type =
38、BarType.Stack ZedGraphControl1.AxisChange() SetSize() End Sub7.4.5 7.4.5 绘制分段柱状图7.4.6 7.4.6 绘制双线曲线案例名称:绘制双线曲线案例名称:绘制双线曲线工程名称:工程名称:Proj7-3 Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click Dim myPane As GraphPane = ZedGraphControl1.GraphPane m
39、yPane.Title.Text = 标题 myPane.YAxis.Title.Text = Y轴说明 myPane.XAxis.Title.Text = X轴说明 设置初始数据 Dim x, y1, y2 As Double Dim list1 As New PointPairList() Dim list2 As New PointPairList() Dim i As Integer For i = 0 To 36 x = CDbl(i) + 5 y1 = 1.5 + Math.Sin(CDbl(i) * 0.2) y2 = 3.0 * (1.5 + Math.Sin(CDbl(i)
40、* 0.2) list1.Add(x, y1) list2.Add(x, y2) Next 创建红色的菱形曲线, 图中的 Porsche Dim myCurve = myPane.AddCurve(Porsche, list1, Color.Red, SymbolType.Diamond) 创建蓝色的圆形曲线, 图中的 Piper Dim myCurve2 = myPane.AddCurve(Piper, list2, Color.Blue, SymbolType.Circle) 在数据变化时绘制图形 ZedGraphControl1.AxisChange() SetSize() End Sub绘制双线曲线 7.5 Word7.5 Word数据图表生成系统图表可以通过操作系统的Word组件,自动生成到Word文档中。Word系统自带的组件是“Micr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南周口中英文学校高三高考物理试题系列模拟卷(10)含解析
- 信阳涉外职业技术学院《石油工程大数据》2023-2024学年第一学期期末试卷
- 信息技术 第二册(五年制高职)课件 9.3.1 语音识别系统
- 护士分层级培训及管理
- 护理操作质量控制
- 支行行长日常管理
- 2025不动产登记代理人《不动产登记代理实务》考前冲刺必会300题-含详解
- 青海省医疗卫生事业单位招聘(中药)历年考试真题库及答案
- 原发性腹膜癌病人的护理
- 2024-2025学年下学期高三英语人教版同步经典题精练之动词词义辨析
- 卵巢癌的手术治疗PPT通用课件
- 远洋航线设计、航法及气象导航
- 癌痛规范化的全程管理
- 10kV共箱封闭铜母线桥采购合同
- CAD进阶练习100题
- 枫香精油(征求意见稿)
- 电镀企业安全风险辨识分级管控清单
- 2022年北京市专升本英语真题
- 货币金融学笔记(共60页)
- 湘少版六年级下册英语连词成句年级联考习题
- 2022年交通管制员年终考核个人工作总结
评论
0/150
提交评论