作成日: 2022/01/07 最終更新日: 2022/01/07
文書種別
使用方法
詳細
積層棒グラフの棒の上部に合計値を表示するには、FlexCharのSymbolRenderingイベントを使用し、手動で合計値を計算してDrawStringメソッドで描画します。

◎サンプルコード(VB)
Imports C1.Chart
Imports C1.Win.Chart
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'データテーブルの設定
Dim table1 As DataTable = New DataTable()
table1.Columns.Add(New DataColumn("ID", GetType(System.Double)))
table1.Columns.Add(New DataColumn("個数", GetType(System.Double)))
table1.Rows.Add(New Object() {1, 10})
table1.Rows.Add(New Object() {2, 30})
table1.Rows.Add(New Object() {3, 20})
table1.Rows.Add(New Object() {4, 30})
table1.Rows.Add(New Object() {5, 10})
table1.AcceptChanges()
Dim table2 As DataTable = New DataTable()
table2.Columns.Add(New DataColumn("ID", GetType(System.Double)))
table2.Columns.Add(New DataColumn("個数", GetType(System.Double)))
table2.Rows.Add(New Object() {1, 30})
table2.Rows.Add(New Object() {2, 20})
table2.Rows.Add(New Object() {3, 10})
table2.Rows.Add(New Object() {4, 30})
table2.Rows.Add(New Object() {5, 20})
table2.AcceptChanges()
'シリーズを追加
FlexChart1.Series.Clear()
Dim series1 As Series = New Series()
series1.ChartType = ChartType.Column
series1.DataSource = table1
series1.BindingX = "ID"
series1.Binding = "個数"
FlexChart1.Series.Add(series1)
Dim series2 As Series = New Series()
series2.ChartType = ChartType.Column
series2.DataSource = table2
series2.BindingX = "ID"
series2.Binding = "個数"
FlexChart1.Series.Add(series2)
'積層グラフの設定
FlexChart1.Stacking = Stacking.Stacked
'Y軸範囲の設定
FlexChart1.AxisY.Min = 0
FlexChart1.AxisY.Max = 70
End Sub
Private Sub FlexChart1_Rendering(sender As Object, e As RenderEventArgs) Handles FlexChart1.Rendering
'データラベルの設定
FlexChart1.DataLabel.Position = LabelPosition.Center
FlexChart1.DataLabel.Content = "{y:#,##0}"
'合計の算出
Dim s0 As Series = FlexChart1.Series(0)
Dim s1 As Series = FlexChart1.Series(1)
Dim val0() As Double = s0.GetValues(0)
Dim val1() As Double = s1.GetValues(0)
Dim valSum() As Double = New Double((val1.Length) - 1) {}
Dim i As Integer
For i = 0 To val1.Length - 1
valSum(i) = (val0(i) + val1(i))
Next
'合計の表示
Dim sumFont As Font = New Font(Me.Font, FontStyle.Bold)
AddHandler s1.SymbolRendering,
Sub(sndr, args)
Dim offsetX As Integer = -10
Dim offsetY As Integer = -20
Dim y As Integer = CType(FlexChart1.AxisY.Convert(valSum(args.Index)), Integer)
e.Graphics.DrawString($"{valSum(args.Index)}", sumFont, Brushes.Orange, New PointF((args.Point.X + offsetX), (y + offsetY)))
End Sub
End Sub
End Class
◎サンプルコード(C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using C1.Chart;
using C1.Win.Chart;
namespace _20210224h
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//データテーブルの設定
var table1 = new DataTable();
table1.Columns.Add(new DataColumn("ID", typeof(double)));
table1.Columns.Add(new DataColumn("個数", typeof(double)));
table1.Rows.Add(new object[] { 1, 10 });
table1.Rows.Add(new object[] { 2, 30 });
table1.Rows.Add(new object[] { 3, 20 });
table1.Rows.Add(new object[] { 4, 30 });
table1.Rows.Add(new object[] { 5, 10 });
var table2 = new DataTable();
table2.Columns.Add(new DataColumn("ID", typeof(double)));
table2.Columns.Add(new DataColumn("個数", typeof(double)));
table2.Rows.Add(new object[] { 1, 30 });
table2.Rows.Add(new object[] { 2, 20 });
table2.Rows.Add(new object[] { 3, 10 });
table2.Rows.Add(new object[] { 4, 30 });
table2.Rows.Add(new object[] { 5, 20 });
//シリーズを追加
flexChart1.Series.Clear();
Series series1 = new Series();
series1.ChartType = ChartType.Column;
series1.DataSource = table1;
series1.BindingX = "ID";
series1.Binding = "個数";
flexChart1.Series.Add(series1);
Series series2 = new Series();
series2.ChartType = ChartType.Column;
series2.DataSource = table2;
series2.BindingX = "ID";
series2.Binding = "個数";
flexChart1.Series.Add(series2);
// 積層グラフの設定
flexChart1.Stacking = Stacking.Stacked;
// Y軸範囲の設定
flexChart1.AxisY.Min = 0;
flexChart1.AxisY.Max = 70;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void flexChart1_Rendering(object sender, RenderEventArgs e)
{
// データラベルの設定
flexChart1.DataLabel.Position = LabelPosition.Center;
flexChart1.DataLabel.Content = "{y:#,##0}";
// 合計の算出
Series s0 = flexChart1.Series[0];
Series s1 = flexChart1.Series[1];
double[] val0 = s0.GetValues(0);
double[] val1 = s1.GetValues(0);
double[] valSum = new double[val1.Length];
for (var i = 0; i < val1.Length; i++)
{
valSum[i] = val0[i] + val1[i];
}
// 合計の表示
Font sumFont = new Font(this.Font, FontStyle.Bold);
s1.SymbolRendering += (sndr, args) =>
{
int offsetX = -10;
int offsetY = -20;
int y = (int)flexChart1.AxisY.Convert(valSum[args.Index]);
e.Graphics.DrawString($"{valSum[args.Index]}", sumFont, Brushes.Orange, new PointF(args.Point.X + offsetX, y + offsetY));
};
}
}
}