合計のデータポイントラベルを表示 |
積み上げ棒グラフで合計のデータポイントラベルを表示 (135) | |
|
複合グラフを作成し、各科目の点数は積み上げ棒グラフで表示し、合計点数は折れ線で表示 します。 その、折れ線を非表示にし、データポイントラベルだけ表示する事で実現しています。 下部の '合計の折れ線を非表示に設定 部分をコメント化すれば通常の棒グラフと 折れ線グラフの複合グラフが作成出来ます。 但し、積み上げ棒グラフと折れ線の複合 ですと折れ線も積上げられますので一工夫必要となります。 Option Explicit 'SampleNo=135 WindowsXP VB6.0(SP5) 2002.04.23 Private sName(10) As String '生徒名 Private Kamoku(4) As String '科目名 Private intDat(10, 4) As Long '点数のデータ Private Sub sChartViewSet() '2 次元組み合わせグラフを表示 MSChart1.chartType = VtChChartType2dCombination 'すべての図表系列がスタック(系列の積上げ)されます MSChart1.Stacking = True '合計の系列だけ折線に設定 MSChart1.Plot.SeriesCollection(4).SeriesType = VtChSeriesType2dLine '合計の凡例だけを非表示に出来るがデータラベルの表示位置が変る With MSChart1 '凡例の表示位置を設定 .Legend.Location.LocationType = VtChLocationTypeRight .ShowLegend = True End With 'データラベルをプロット表示 Dim series As series For Each series In MSChart1.Plot.SeriesCollection With series.DataPoints.Item(-1).DataPointLabel If series = "合計" Then '合計の凡例を非表示にするとこの位置が変る .LocationType = VtChLabelLocationTypeBase '合計だけは凡例の色で表示 .VtFont.VtColor.Set _ series.DataPoints(-1).Brush.FillColor.Red, _ series.DataPoints(-1).Brush.FillColor.Green, _ series.DataPoints(-1).Brush.FillColor.Blue Else .VtFont.VtColor.Set 0, 0, 0 '合計以外は中心に表示 .LocationType = VtChLabelLocationTypeCenter End If .Component = VtChLabelComponentValue .ValueFormat = "0" .Backdrop.Frame.Style = VtFrameStyleNull End With Next '目盛り線の設定 (点数の横線) With MSChart1.Plot.Axis(VtChAxisIdY) .ValueScale.Auto = False .ValueScale.Maximum = 300 '最大値 .ValueScale.Minimum = 0 '最小値 .ValueScale.MajorDivision = 6 '目盛り線の数 .ValueScale.MinorDivision = 2 '補助目盛り線等分 .AxisGrid.MajorPen.VtColor.Set 0, 255, 255 '目盛り線の色 .AxisGrid.MinorPen.VtColor.Set 230, 230, 0 '補助目盛り線の色 End With '合計の折れ線を非表示に設定 MSChart1.Plot.SeriesCollection(4).ShowLine = False End Sub |
データ部分はこれまでのサンプルと同じものを使用し、合計の系列が使用できるように赤字 の部分だけ変更します。 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 Open "seiseki.csv" For Input As #intFileNo intDatN = -1 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 With MSChart1 .chartType = VtChChartType2dBar .ColumnCount = 4 .RowCount = 10 For i = 1 To .RowCount For j = 1 To .ColumnCount .Column = j .Row = i .Data = intDat(i, j) Next j Next i For i = 1 To 10 .DataGrid.RowLabel(i, 1) = sName(i) Next i For i = 1 To 4 .DataGrid.ColumnLabel(i, 1) = Kamoku(i) .Plot.SeriesCollection(i).LegendText = Kamoku(i) Next i End With End Sub Private Sub Form_Load() Form1.Move 0, 0, 10400, 7000 MSChart1.Move 10, 10, Me.Width - 140, Me.Height - 400 Call sDataOpen Call sChartViewSet End Sub |
|
表示結果 |
2002/04/23