作成日: 2022/03/14 最終更新日: 2022/03/14
文書種別
使用方法
詳細
散布図において、ある矩形範囲(X値、Y値の範囲で指定)の背景色を変更するには、RenderedイベントとPaintイベントを利用します。
最初にRenderedイベントで、指定した矩形範囲をコントロール座標に変換します(DataToPointメソッドを使用)。次いでPaintイベントにて、e.Graphics.FillRectangleメソッドを用いてこの矩形を塗りつぶします。
最初にRenderedイベントで、指定した矩形範囲をコントロール座標に変換します(DataToPointメソッドを使用)。次いでPaintイベントにて、e.Graphics.FillRectangleメソッドを用いてこの矩形を塗りつぶします。
※ この方法でアラームゾーンを代用することが可能です。
以下に、X=200~600、Y=400~800の矩形範囲を黄色に染めるサンプルを記載します。

◎サンプルコード(VB)
Imports C1.Chart
Imports C1.Win.Chart
Public Class Form1
Dim posA1 As Point
Dim posA2 As Point
Dim isFirstTime As Boolean = True
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの作成
Dim dt As New DataTable()
dt.Columns.AddRange({New DataColumn("X", GetType(Double)), New DataColumn("Y", GetType(Double))})
Dim r As New Random()
For i = 0 To 99
dt.Rows.Add(r.Next(1, 1000), r.Next(1, 1000))
Next
dt.AcceptChanges()
' 散布図の作成チャートの設定
Dim series1 As New Series()
series1.ChartType = ChartType.Scatter
series1.BindingX = "X"
series1.Binding = "Y"
series1.DataSource = dt
series1.SymbolStyle.FillColor = Color.LightBlue
series1.SymbolStyle.StrokeColor = Color.LightBlue
series1.SymbolSize = 5
FlexChart1.Series.Clear()
FlexChart1.Series.Add(series1)
' 軸の設定
FlexChart1.AxisX.Min = 0
FlexChart1.AxisX.Max = 1000
FlexChart1.AxisY.Min = 0
FlexChart1.AxisY.Max = 1000
End Sub
Private Sub FlexChart1_Rendered(sender As Object, e As RenderEventArgs) Handles FlexChart1.Rendered
If isFirstTime Then
' フラグの初期化
isFirstTime = False
' 描画領域の取得
posA1 = Point.Truncate(FlexChart1.DataToPoint(New PointF(200.0F, 800.0F)))
posA2 = Point.Truncate(FlexChart1.DataToPoint(New PointF(600.0F, 400.0F)))
' 描画の強制
FlexChart1.Invalidate()
End If
End Sub
Private Sub FlexChart1_Paint(sender As Object, e As PaintEventArgs) Handles FlexChart1.Paint
' 矩形の塗りつぶし(X値が200~600、Y値が400~800の間)
e.Graphics.FillRectangle(Brushes.Yellow, New Rectangle(posA1, New Size(Math.Abs(posA2.X - posA1.X), Math.Abs(posA2.Y - posA1.Y))))
End Sub
End Class
◎サンプルコード(C#)
using C1.Chart;
using C1.Win.Chart;
namespace prj_C1FlexChart
{
public partial class Form1 : Form
{
Point posA1;
Point posA2;
bool isFirstTime = true;
public Form1()
{
InitializeComponent();
// データの作成
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]{new DataColumn("X", typeof(Int32)), new DataColumn("Y", typeof(Int32))});
Random r = new Random();
for (var i = 0; i <= 99; i++)
dt.Rows.Add(r.Next(1, 1000), r.Next(1, 1000));
dt.AcceptChanges();
// 散布図の作成チャートの設定
Series series1 = new Series();
series1.ChartType = ChartType.Scatter;
series1.BindingX = "X";
series1.Binding = "Y";
series1.DataSource = dt;
series1.SymbolStyle.FillColor = Color.LightBlue;
series1.SymbolStyle.StrokeColor = Color.LightBlue;
series1.SymbolSize = 5;
flexChart1.Series.Clear();
flexChart1.Series.Add(series1);
// 軸の設定
flexChart1.AxisX.Min = 0;
flexChart1.AxisX.Max = 1000;
flexChart1.AxisY.Min = 0;
flexChart1.AxisY.Max = 1000;
}
private void flexChart1_Rendered(object sender, RenderEventArgs e)
{
if (isFirstTime)
{
// フラグの初期化
isFirstTime = false;
// 描画領域の取得
posA1 = Point.Truncate(flexChart1.DataToPoint(new PointF(200.0F, 800.0F)));
posA2 = Point.Truncate(flexChart1.DataToPoint(new PointF(600.0F, 400.0F)));
// 描画の強制
flexChart1.Invalidate();
}
}
private void flexChart1_Paint(object sender, PaintEventArgs e)
{
// 矩形の塗りつぶし(X値が200~600、Y値が400~800の間)
e.Graphics.FillRectangle(Brushes.Yellow, new Rectangle(posA1, new Size(Math.Abs(posA2.X - posA1.X), Math.Abs(posA2.Y - posA1.Y))));
}
}
}