再探MSCHART
你定义数组的时候不要制定类型,定义成Variant类型,dim mydata(0 to n,0 to 1) As variant,这样没赋值的部分就是NULL,就没有线段,否则当定义成Double或其他类型时,如果没有赋值的部分都是0,这样他就是原点,所以最终曲线都是回到原点,就形成了折线 .AllowDithering = True .AllowDynamicRotation = True .AllowSelections = True 可以選擇點 .AllowSeriesSelection = True 可以選擇整條線 .AutoIncrement = True .ShowLegend = True 顯示圖例名稱 .Legend.Location.LocationType = VtChLocationTypeBottomRight ChartAreas:增加多個繪圖區域,每個繪圖區域包含獨立的圖表組、資料源,用於多個圖表類型在一個繪圖區不相容時。 AlignmentOrientation:圖表區對齊方向,定義兩個繪圖區域間的對齊方式。 AlignmentStyle:圖表區對齊類型,定義圖表間用以對其的元素。 AlignWithChartArea:參照對齊的繪圖區名稱。 InnerPlotPosition:圖表在繪圖區內的位置屬性。 Auto:是否自動對齊。 Height:圖表在繪圖區內的高度(百分比,取值在0-100) Width:圖表在繪圖區內的寬度(百分比,取值在0-100) X,Y:圖表在繪圖區內左上角座標 Position:繪圖區位置屬性,同InnerPlotPosition。 Name:繪圖區名稱。 Axis:坐標軸集合 Title:坐標軸標題 TitleAlignment:坐標軸標題對齊方式 Interval:軸刻度間隔大小 IntervalOffset:軸刻度偏移量大小 MinorGrid:次要輔助線 MinorTickMark:次要刻度線 MajorGrid:主要輔助線 MajorTickMark:主要刻度線 DataSourceID:MSChart的數據源。 Legends:圖例說明。 IsVisibleInLegend=false;//是否顯示圖例說明 IsValueShownAsLabel=true; IsValueShownAsLabel:是否顯示資料點標籤,如果為true,在圖表中顯示每一個資料值 Label:資料點標籤文本 Chart1.Series[1].IsValueShownAsLabel=true;//是否顯示資料 Chart1.Series[1].IsVisibleInLegend=false;//是否顯示資料說明 Chart1.Series[1].MarkerStyle=MarkerStyle.Circle;//線條上的資料點標誌類型 Chart1.Series[1].MarkerSize=8;//標誌大小 Palette:圖表外觀定義。 Series:最重要的屬性,圖表集合,就是最終看到的圓形圖、柱狀圖、線圖、點圖等構成的集合;可以將多種相互相容的類型放在一個繪圖區域內,形成複合圖。 LabelFormat:資料點標籤文本格式 LabelAngle:標籤字體角度 Name:圖表名稱 Points:資料點集合 XValueType:橫坐標軸類型 YValueType:縱坐標軸類型 XValueMember:橫坐標綁定的資料源(如果資料源為Table,則填寫橫坐標要顯示的欄位名稱) YValueMembers:縱坐標綁定的資料源(如果資料源為Table,則填寫縱坐標要顯示的欄位名稱,縱坐標可以有兩個) ChartArea:圖表所屬的繪圖區域名稱 ChartType:圖表類型(柱形、餅形、線形、點形等) Legend:圖表使用的圖例名稱 Titles:標題集合。 width:MSChart的寬度。 height:MSChart的高度。 MSChart1.Row= 1 MSChart1.Column= 3 、 根據你的要求,我簡單做了一個日期和收入的對應圖,代碼及調試結果如下所示 Private Sub Command1_Click() Dim i As Integer Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "lwl.mdb" conn.Open rs.Open "select * from lwl",conn,adOpenKeyset,adLockOptimistic ' Set MSChart1.DataSource = rs With MSChart1 '// 以線條方式顯示 .chartType = 3 '// 圖表標題 .TitleText = "SMT監控" //页底说明 MSChart.Footnote.Text = "说明:这是测试统计图表"; //设置Plot的Shadow MSChart.Plot.Backdrop.Shadow.Style = VtShadowStyle.VtShadowStyleDrop; MSChart.Plot.Backdrop.Shadow.Offset.Set(60,60);//'设置Shadow的大小设置Plot的边框 MSChart.Plot.Backdrop.Frame.Style = VtFrameStyle.VtFrameStyleSingleLine; 设置Plot的背景色 MSChart.Plot.Backdrop.Fill.Style = VtFillStyle.VtFillStyleBrush; MSChart.Plot.Backdrop.Fill.Brush.FillColor.Set(255,255,255); //取消竖的导航线 _MSChart.Plot.get_Axis(VtChAxisId.VtChAxisIdX,0).AxisGrid.MajorPen.Style = VtPenStyle.VtPenStyleNull; _MSChart.Plot.get_Axis(VtChAxisId.VtChAxisIdX,0).AxisScale.Hide = true; ' '繪圖筆設置 .Plot.SeriesCollection(1).Pen.Width = 20 .Plot.SeriesCollection(1).Pen.Style = VtPenStyleSolid ' '自動可視範圍調整(自動縮放) .Plot.Axis(VtChAxisIdX).ValueScale.Auto = False '.Plot.Axis(VtChAxisIdY).ValueScale.Auto = False '//標題字體 .Plot.Axis(VtChAxisIdX).AxisTitle.VtFont.Size = 12 .Plot.Axis(VtChAxisIdY).AxisTitle.VtFont.Size = 12 '設置XY標題 .Plot.Axis(VtChAxisIdX).AxisTitle = "時間(s)" .Plot.Axis(VtChAxisIdY).AxisTitle = "速度cm/s" '// 最大值 .Plot.Axis(VtChAxisIdX).ValueScale.Maximum = 600 .Plot.Axis(VtChAxisIdY).ValueScale.Maximum = 100 '// 最小值 .Plot.Axis(VtChAxisIdY).ValueScale.Minimum = 0 .Plot.Axis(VtChAxisIdX).ValueScale.Minimum = 0 '//主輔助線 .Plot.Axis(VtChAxisIdX).ValueScale.MajorDivision = 30 'X禸?璶 .Plot.Axis(VtChAxisIdY).ValueScale.MajorDivision = 20 'Y禸?璶 ‘ 不顯示則設為majorpen.style=vtpenstylenull ‘//輔助輔助線 .Plot.Axis(VtChAxisIdX).ValueScale.MinorDivision = 0 'X禸Ω璶 .Plot.Axis(VtChAxisIdY).ValueScale.MinorDivision = 0 'Y禸Ω璶 ‘//線型設置 .Plot.Axis(VtChAxisIdX).AxisGrid.MajorPen.Style = VtPenStyleDotted .Plot.Axis(VtChAxisIdY).AxisGrid.MajorPen.Style = VtPenStyleDotted .Plot.AutoLayout = False ‘座標佈局人工還是自動 .Plot.UniformAxis = False '座標單位刻度是否一致 '// 增加測試資料 .ColumnCount = 1 '// 將圖表作為圖例的背景。 .ShowLegend = False '// 標記每個點的值 For i = 1 To .Plot.SeriesCollection.Count .Plot.SeriesCollection(i).DataPoints(-1).DataPointLabel.LocationType = VtChLabelLocationTypeAbovePoint Next .Row = i .RowLabel = CStr(rs("日期")) .Data = rs("收入") With Chart1.Plot.Axis(VtChAxisIdX) 'X軸設置 '.ValueScale.MajorDivision = 24 '.ValueScale.MinorDivision = 24 .CategoryScale.Auto = False '設置為人工縮放。 .CategoryScale.DivisionsPerLabel = 12 ' '每12個單位顯示標籤。 .CategoryScale.DivisionsPerTick = 12 ' '每12個單位顯示刻度。 .CategoryScale.LabelTick = True '在刻度標記頂端顯示標籤。 End With 修改X座標值 XMSChart1.Row = 1: MSChart1.RowLabel = "1" MSChart1.Plot.DataSeriesInRow = True For xCount = 1 To MSChart1.RowCount With MSChart1.Plot.Axis(VtChAxisIdX).ValueScale .Auto = False .Maximum = 50 .Minimum = 0 .MajorDivision = 5 .MinorDivision = 2 End With With MSChart1.Plot.Axis(VtChAxisIdY).ValueScale .Auto = False .Maximum = 100 .Minimum = 0 .MajorDivision = 10 .MinorDivision = 2 End With '改变图例的位置: MSChart1.Legend.Location.LocationType = VtChLocationTypeTop'图例在图表上方(具体参数vb会自动列出,看意思就知道了) '改变plot的大小: '通过Plot.LocationRect.Min.x和Plot.LocationRect.Min.y确定绘图区的左下方坐标;通过Plot.LocationRect.Max.x和Plot.LocationRect.Max.y确定绘图区的右上方坐标 With MSChart1 .Plot.AutoLayout = False .Plot.LocationRect.Min.Set 0,0 .Plot.LocationRect.Max.Set MSChart1.Width,MSChart1.Height End With Plot 对象 表示图表显示的区域。 语法 Plot 说明 Plot 对象允许您编程以下对象:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |