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