MSChartコントロールを操作する(その2)
                                                           玄関へお回り下さい。   
グラフのタイプを変更・データポイントラベル・凡例・マーカーの表示設定(その2) (022)
     今回は、プログラムからコントロールを操作してグラフを描画します。
前回、使用したプログラムを使用し、データ読み込みの部分と表示の部分をプロシージャに
作成し、メニューを作って表示を選択出来るようにします。

下記をフォームの宣言セクションに記入して下さい。

Option Explicit 'SampleNo=022 WindowsXP VB6.0(SP5) 2002.04.25

Private intChartType As Integer    'グラフの種類
Private sName(10)   As String     '生徒名
Private Kamoku(4)   As String     '科目名
Private intDat(10, 4) As Long      '点数のデータ

データ読み込み部分のプロシージャ
これは前回使用したものを使っています。

Private Sub sDataOpen()
  Dim CsvD(10)   As String
  Dim intDatN    As Integer
  Dim i       As Long
  Dim j       As Long
  Dim intFileNo   As Integer

  intFileNo = FreeFile
  'シーケンシャル入力モードで seiseki.csv をオープン
  Open "seiseki.csv" For Input As #intFileNo
  intDatN = -1  ' 0 を初期値にするために
  'EOF(intFileNo)が True になるまで実行
  Do Until EOF(intFileNo)
    intDatN = intDatN + 1   '件数をカウント
    'データを各変数に読込
    Input #intFileNo, CsvD(0), CsvD(1), CsvD(2), CsvD(3), CsvD(4), _
         CsvD(5), CsvD(6), CsvD(7), CsvD(8), CsvD(9), CsvD(10)
    If intDatN = 0 Then  '項目の部分
      For j = 1 To 10
        sName(j) = CsvD(j)
      Next j
    Else
      Kamoku(intDatN) = CsvD(0) '科目名
      For j = 1 To 10
        intDat(j, intDatN) = CInt(CsvD(j)) '点数
      Next j
    End If
  Loop
  'ファイルを閉じる
  Close #intFileNo
  'CSVファイルから読み込んだデータをグラフのデータにセット
  With MSChart1
    'デフォルトのグラフタイプ(2D棒)
    .chartType = VtChChartType2dBar
    '列数を3列に設定(国語・数学・英語)
    '図表と関連する現在のデータ グリッド内の列数を設定します
    .ColumnCount = 3
    'CSV ファイルの行と列とは逆になるので注意
    '行数を10行に設定(生徒毎)
    .RowCount = 10
    For i = 1 To .RowCount  '行
      For j = 1 To .ColumnCount '列
        .Column = j
        .Row = i
        '配列からデータを読込
        .Data = intDat(i, j) 'intDat(行,列)
      Next j
    Next i
    'ラベル及び列テキストをセット
    For i = 1 To 10
      '図表と関連する現在のデータ グリッド内の特定の行ラベルを設定
      .DataGrid.RowLabel(i, 1) = sName(i)  '生徒名の読み込み
    Next i
    For i = 1 To 3
      '図表に関連するグリッド内のデータ列のラベルを設定
      .DataGrid.ColumnLabel(i, 1) = Kamoku(i) '科目名
      '図の凡例中の系列を識別する文字列を設定
      .Plot.SeriesCollection(i).LegendText = Kamoku(i) '凡例
    Next i
  End With
End Sub

表示設定の部分のプロシージャ
この中には後で色んな設定を書いて行きますが、今は取り合えず選択したグラフを表示する
設定だけにしておきます。

Private Sub sChartViewSet()
'グラフの表示設定

  '======================================================
  '選択したグラフを表示
  MSChart1.chartType = intChartType
  '======================================================

End Sub


下記のようなメニューの作成
  


Private Sub mnuChartType2dBar_Click()
'2D棒グラフ
  intChartType = VtChChartType2dBar
  Call sChartViewSet
End Sub


Private Sub mnuChartType3dBar_Click()
'3D棒グラフ
  intChartType = VtChChartType3dBar
  Call sChartViewSet
End Sub


Private Sub mnuChartType2dLine_Click()
'2D折れ線グラフ
  intChartType = VtChChartType2dLine
  Call sChartViewSet
End Sub


Private Sub mnuChartType3dLine_Click()
'3D折れ線グラフ
  intChartType = VtChChartType3dLine
  Call sChartViewSet
End Sub


Private Sub mnuChartType2dPie_Click()
'2D円グラフ
  intChartType = VtChChartType2dPie
  Call sChartViewSet
End Sub


Private Sub mnuFileExit_Click()
  Unload Me
End Sub


起動時の設定
フォームとコントロールの大きさはお好きなサイズで表示して下さい。

Private Sub Form_Load()
  Form1.WindowState = vbMaximized     'フォームを最大化で表示
  Call sDataOpen             'データの読み込み
  intChartType = VtChChartType2dBar    '初期値に2D棒グラフを設定
  Call sChartViewSet           '表示設定
End Sub


Private Sub Form_Activate()
  'フォームの大きさに合せて表示
  MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
End Sub


Private Sub Form_Resize()
  'フォームのサイズが変更されてもフォームに合せて表示
  MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
  sChartViewSet
End Sub


ここまで出来たら一度実行して見て下さい。

グラフを選択すれば、選択したグラフが表示されればOKです。
     凡例の表示 

メニューのプロシージャに記入

Private Sub mnuOptionLegend_Click()
'凡例の表示
  mnuOptionLegend.Checked = Not mnuOptionLegend.Checked
  Call sChartViewSet
End Sub


表示設定のプロシージャに追加

Private Sub sChartViewSet()
'グラフの表示設定

  '======================================================
  '選択したグラフを表示
  MSChart1.chartType = intChartType
  '======================================================

  '======================================================
  '凡例の設定 標準の設定では文字が欠ける(VB5.0)
  If mnuOptionLegend.Checked = True Then
    With MSChart1
      '凡例文字の設定
      .Plot.SeriesCollection(1).LegendText = "国 語"
      .Plot.SeriesCollection(2).LegendText = "数 学"
      .Plot.SeriesCollection(3).LegendText = "英 語"
      '凡例の表示位置を設定
      .Legend.Location.LocationType = VtChLocationTypeRight
      .ShowLegend = True
    End With
  Else
    MSChart1.ShowLegend = False
  End If

  '======================================================

End Sub


先ほど作成した表示設定の部分のプロシージャ選択したグラフを表示の下部に凡例の
表示設定を追加して下さい。
以降、色々な表示設定は、このような方法で追加記入して行きます。

     データポイントラベル(棒グラフの上に表示する点数) 

メニューのプロシージャに記入
Private Sub mnuOptionDataLabel_Click()
'データポイントラベルの表示
  mnuOptionDataLabel.Checked = Not mnuOptionDataLabel.Checked
  Call sChartViewSet
End Sub


表示設定のプロシージャに追加
  '======================================================
  'データラベルをプロット表示
  If mnuOptionDataLabel.Checked = True Then
    Dim series As Object
    For Each series In MSChart1.Plot.SeriesCollection
      With series.DataPoints.Item(-1).DataPointLabel
        '表示位置
        .LocationType = VtChLabelLocationTypeAbovePoint
        .Component = VtChLabelComponentValue
        .ValueFormat = "0"  '"0.0" 表示フォーマット
        '表示色棒の色と同じ色で
        '.VtFont.VtColor.Set 72, 255, 72 '別に指定する場合
        .VtFont.VtColor.Set _
        series.DataPoints(-1).Brush.FillColor.Red, _
        series.DataPoints(-1).Brush.FillColor.Green, _
        series.DataPoints(-1).Brush.FillColor.Blue
        .Backdrop.Frame.Style = VtFrameStyleNull
      End With
    Next
  Else
    For Each series In MSChart1.Plot.SeriesCollection
      With series.DataPoints.Item(-1).DataPointLabel
        .LocationType = VtChLabelLocationTypeNone
      End With
    Next
  End If
  '======================================================
  
   2D折れ線のマーカーの表示

メニューのプロシージャに記入
Private Sub mnuOption2dLineMarker_Click()

'2D折れ線のマーカーの表示
  mnuOption2dLineMarker.Checked = Not mnuOption2dLineMarker.Checked
  Call sChartViewSet
End Sub

表示設定のプロシージャに追加
  '======================================================
  '折れ線の場合マーカーを表示
  If intChartType = VtChChartType2dLine And _
          mnuOption2dLineMarker.Checked = True Then
    'マーカーの表示例
    For Each series In MSChart1.Plot.SeriesCollection
      series.SeriesMarker.Show = True '2D折れ線のマーカーの表示
      'series.ShowLine = False    '2D折れ線の表示
    Next
  Else
    For Each series In MSChart1.Plot.SeriesCollection
      series.SeriesMarker.Show = False  'マーカーの非表示
      series.Pen.Width = 69
      If series = "数学" Then
        series.Pen.Width = 23      '2D折れ線の太さ
      End If
    Next
  End If
  '======================================================


次の項では、目盛り設定・タイトル・ラベル表示・グラフの線の部分の設定について
記入します。

系列個別に任意のマーカーを設定
   'マーカーの形状を指定して表示
For Each series In MSChart1.Plot.SeriesCollection
  series.SeriesMarker.Show = False
  '自動のマーカーを解除
  series.SeriesMarker.Auto = False
  '個別にマーカーを指定
  Select Case series
    Case "国語"
      series.DataPoints.Item(-1).Marker.Style = VtMarkerStyleUpTriangle
    Case "数学"
      series.DataPoints.Item(-1).Marker.Style = VtMarkerStyleCircle
    Case "英語"
      series.DataPoints.Item(-1).Marker.Style = VtMarkerStyle3dBall
  End Select
  series.SeriesMarker.Show = True
Next


 マーカーの定数はヘルプで調べて下さい。




2002/06/08