搬家第五天-129.Wincc V7.3 MSChart控件初步试用7-差距大多变量曲线图表绘制

有时候我们需要在一张表中绘制多个变量的曲线,这些变量可能相差几个数量级,比如是这个样子:

按照前面博客描述的方法绘制,出来是这个样子的

 

可以看出数字小的曲线全部挤在图形底部,不便于观察。我们可以通过启用第二Y轴来一定程度缓解这种问题。

假设画面上有一个ListView控件,名字叫做LV,已经装入了数据,如上面图形所示。画面上有MSChart控件,名字叫做Chart,放置一个按钮,在按钮的鼠标点击事件中添加以下vbs脚本:

Sub OnClick(ByVal Item)                                      
Dim LV,Chart,flow1(),flow2(),flow3(),flow4(),MyDate(),RowCount,i
Set LV=ScreenItems("LV")
Set Chart=ScreenItems("Chart")
RowCount=LV.listitems.count
Redim flow1(RowCount),flow2(RowCount),flow3(RowCount),flow4(RowCount),MyDate(RowCount)
'Msgbox "ok1"
For i=1 To RowCount
 flow1(i)=CDbl(LV.listItems.item(i).listsubitems.item(2).text)
 flow2(i)=CDbl(LV.listItems.item(i).listsubitems.item(3).text)
 flow3(i)=CDbl(LV.listItems.item(i).listsubitems.item(4).text)
 flow4(i)=CDbl(LV.listItems.item(i).listsubitems.item(5).text)
 MyDate(i)=CStr(LV.listItems.item(i).listsubitems.item(1).text) 
Next

'初始化chart控件
'.Axis坐标轴有两个参数,第一个axisId指坐标轴编号;第二个参数为保留参数,此处为1,可以不写
'坐标轴编号0,1,2,3,4
'0为x轴,1为y轴,2位第二y轴,3为z轴,4表示无坐标轴
With Chart
 .TitleText = "流量"
 .ColumnCount=4 '两条曲线 

'   '设置图线的外观
'   '设置XY轴
   .Plot.Axis(0).ValueScale.Auto = 0   
   .Plot.Axis(1).ValueScale.Auto = 0
    .Plot.Axis(2).ValueScale.Auto = 0
'//  '设置最大值
   .Plot.Axis(0).ValueScale.Maximum = RowCount '设置横轴标注最大值
   .Plot.Axis(1).ValueScale.Maximum = 50000 '设置纵轴标1注最大值
    .Plot.Axis(2).ValueScale.Maximum = 450 '设置纵轴标2注最大值
'//  '设置最小值
   .Plot.Axis(0).ValueScale.Minimum = 0
   .Plot.Axis(1).ValueScale.Minimum = 0
    .Plot.Axis(2).ValueScale.Minimum = 0 
 .RowCount =RowCount 
   .Plot.Axis(0).AxisGrid.MajorPen.Style = 1
   .Plot.Axis(1).AxisGrid.MajorPen.Style = 1
    .Plot.Axis(2).AxisGrid.MajorPen.Style = 1
   .Plot.AutoLayout = 1
   .Plot.UniformAxis = 0
    '图表类型
    .chartType = 3 '2dLine
   '横坐标轴标注
    For i = 1 To RowCount
 .Row = i
 .RowLabel = "" '先清空标签 
 Next
    .Row=1
   .RowLabel=CStr(MyDate(1))   
    For i=1 To RowCount
        .Row = i
        .RowLabel = CStr(MyDate(i))
   Next 
 
 '设置曲线1
    .ShowLegend = 1  '显示图例
   .Column=1
    .ColumnLabel = "流量1"
 .RandomFill=False
    For i=1 To RowCount
     .row = i
   .data=flow1(i)
   Next
 
 With .Plot.SeriesCollection(1).DataPoints(-1)
   .DataPointLabel.LocationType = 1 ''&& 为1时显示数值,0为不显示
     '将数据点标记设置成不可见的。
     .Marker.Visible = False
     .Marker.Style = 1
     
    End With
 .Plot.SeriesCollection(1).SecondaryAxis=True '绑定到第二Y轴上
 
 '设置曲线2
 .Column=2
 .ColumnLabel = "流量2"
 .RandomFill=False
 For i=1 To RowCount
      .row = i
   .data=flow2(i)
 Next
 With .Plot.SeriesCollection(2).DataPoints(-1)
   .DataPointLabel.LocationType = 1 ''&& 为1时显示数值,0为不显示
     '将数据点标记设置成可见的。
     .Marker.Visible = False
     .Marker.Style = 1
    End With
    .Plot.SeriesCollection(2).SecondaryAxis=True '绑定到第二Y轴上
   
    '设置曲线3
 .Column=3
 .ColumnLabel = "流量3"
 .RandomFill=False
 For i=1 To RowCount
      .row = i
   .data=flow3(i)
 Next
 With .Plot.SeriesCollection(3).DataPoints(-1)
   .DataPointLabel.LocationType = 1 ''&& 为1时显示数值,0为不显示
     '将数据点标记设置成可见的。
     .Marker.Visible = False
     .Marker.Style = 1
    End With
   
    '设置曲线4
 .Column=4
 .ColumnLabel = "流量4"
 .RandomFill=False
 For i=1 To RowCount
      .row = i
   .data=flow4(i)
 Next
 With .Plot.SeriesCollection(4).DataPoints(-1)
   .DataPointLabel.LocationType = 1 ''&& 为1时显示数值,0为不显示
     '将数据点标记设置成可见的。
     .Marker.Visible = False
     .Marker.Style = 1
    End With
End With

End Sub
保存运行,最终效果是这样子,可以看出,调整之后效果好多了。脚本中红色部分就是关键点。

posted @ 2021-02-02 20:29  来自金沙江的小鱼  阅读(1194)  评论(1编辑  收藏  举报