搬家第五天-128.Wincc V7.3 MSChart控件初步使用6-叠加直方图
前面的博客介绍了使用MSChart制作百分比饼图,饼图一次性只能体现某一天各装置的产量百分比情况。本文介绍如何使用MSChart控件制作叠加直方图,可以在一个控件内把所有日期各装置产量情况展示出来。
假设有一个车间有5套生产装置生产同样的产品,每天各装置的产量已经记录在后台报表中,有一个ListView控件,名字叫做LV,把产量表读取出来,是这个样子:
画面上放置一个MSChart,名字叫做Chart,放置一个按钮,用于生成统计图,按钮的鼠标点击事件中添加以下vbs脚本:
Sub OnClick(ByVal Item)
Dim LV,Chart,RowCount,i
Dim MyDate(),produce1(),produce2(),produce3(),produce4(),produce5(),SumProduce()
Set LV=ScreenItems("LV")
Set Chart=ScreenItems("Chart")
RowCount=LV.listitems.count
Redim MyDate(RowCount),produce1(RowCount),produce2(RowCount),produce3(RowCount),produce4(RowCount),produce5(RowCount),SumProduce(RowCount)
'SumProduce=0
For i=1 To RowCount
MyDate(i)=CStr(LV.listItems.item(i).listsubitems.item(1).text)
produce1(i)=CDbl(LV.listItems.item(i).listsubitems.item(2).text)
produce2(i)=CDbl(LV.listItems.item(i).listsubitems.item(3).text)
produce3(i)=CDbl(LV.listItems.item(i).listsubitems.item(4).text)
produce4(i)=CDbl(LV.listItems.item(i).listsubitems.item(5).text)
produce5(i)=CDbl(LV.listItems.item(i).listsubitems.item(6).text)
SumProduce(i)=CDbl(LV.listItems.item(i).listsubitems.item(7).text)
Next
With Chart
.TitleText = "产量"
.ColumnCount=5 '5个曲线
.RandomFill=False
' '设置图线的外观
' '设置XY轴
.Plot.Axis(0).ValueScale.Auto = 0
.Plot.Axis(1).ValueScale.Auto = 0
'// '设置最大值
.Plot.Axis(0).ValueScale.Maximum = RowCount '设置横轴标注最大值
.Plot.Axis(1).ValueScale.Maximum = 1300 '设置纵轴标注最大值
'// '设置最小值
.Plot.Axis(0).ValueScale.Minimum = 0
.Plot.Axis(1).ValueScale.Minimum = 0
.RowCount =RowCount
.Plot.Axis(0).AxisGrid.MajorPen.Style = 1
.Plot.Axis(1).AxisGrid.MajorPen.Style = 1
.Plot.AutoLayout = 1
.Plot.UniformAxis = 0
.chartType = 1 '直方图
.ShowLegend = 1 '显示图例
.AllowSeriesSelection=False '不允许选取整个系列
.column=1
.SeriesColumn=1
For i=1 To RowCount
.Row = i
.data=produce1(i)
Next
'曲线2
.column=2
.SeriesColumn=1
For i=1 To RowCount
.Row = i
.data=produce2(i)
Next
'曲线3
.column=3
.SeriesColumn=1
For i=1 To RowCount
.Row = i
.data=produce3(i)
Next
'曲线4
.column=4
.SeriesColumn=1
For i=1 To RowCount
.Row = i
.data=produce4(i)
Next
'曲线5
.column=5
.SeriesColumn=1
For i=1 To RowCount
.Row = i
.data=produce5(i)
Next
For i=1 To RowCount
.Row = i
.RowLabel =CStr(MyDate(.Row))
Next
With .DataGrid
.ColumnCount = 5
For i = 1 To .ColumnCount
.ColumnLabel(i, 1) = "装置 " & i & "产量"
Next
End With
For i=1 To 5
With .Plot.SeriesCollection(i).DataPoints(-1)
.DataPointLabel.LocationType = 1 ''&& 为1时显示数值,0为不显示
'将数据点标记设置成可见的。
.Marker.Visible = True
End With
Next
End With
End Sub
保存运行项目,点击按钮呈现如下效果
图标上的标注数字有叉叉、方块、圆圈等等图标,看着丑丑的,如果不喜欢,就把.Marker.Visible = True
修改成.Marker.Visible = False 就是行了。这个例子中数字是显示在图块上部的,如果不喜欢可以把.DataPointLabel.LocationType = 1修改成.DataPointLabel.LocationType = 2就显示在图块中部;.DataPointLabel.LocationType = 3就显示在图块底部。