作成日: 2020/05/11 最終更新日: 2020/05/11
文書種別
使用方法
詳細
グラフ領域において、指定した範囲(例:Y値が-1~1の範囲)の背景を任意の色で塗りつぶすには、Paintイベントを利用して独自に矩形を描画する方法が考えられます。
◎サンプルコード(VB)
◎サンプルコード(VB)
Imports C1.Chart
Imports C1.Win.Chart
Public Class Form1
Dim pos1 As Point
Dim pos2 As Point
Dim isFirstTime As Boolean = True
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの作成
Dim dt As DataTable = New DataTable("Test")
dt.Columns.Add("X", GetType(DateTime))
dt.Columns.Add("Y", GetType(System.Single))
Dim i
For i = 0 To 4
dt.Rows.Add(DateTime.Today.AddDays(i), CType((i - 2), Single))
Next
dt.AcceptChanges()
' シリーズの作成
Dim series1 As Series = New Series
' X軸を数値にする場合
series1.DataSource = New PointF() {New PointF(1.0F, -2.0F), New PointF(2.0F, -1.0F), New PointF(3.0F, 0F), New PointF(4.0F, -1.0F), New PointF(5.0F, 2.0F)}
'' X軸をDateTime型にする場合
'series1.DataSource = dt
series1.BindingX = "X"
series1.Binding = "Y"
' チャートの設定
FlexChart1.Series.Clear()
FlexChart1.Series.Add(series1)
FlexChart1.ChartType = ChartType.LineSymbols
End Sub
Private Sub FlexChart1_Rendered(sender As Object, e As RenderEventArgs) Handles FlexChart1.Rendered
' 描画領域の取得
If isFirstTime Then
isFirstTime = False
' X軸を数値にする場合
pos1 = Point.Truncate(FlexChart1.DataToPoint(New PointF(1.0F, 1.0F)))
pos2 = Point.Truncate(FlexChart1.DataToPoint(New PointF(5.0F, -1.0F)))
'' X軸をDateTime型にする場合
'pos1 = Point.Truncate(FlexChart1.DataToPoint(New PointF(CType(FlexChart1.AxisX.ActualMin, Single), 1.0!)))
'pos2 = Point.Truncate(FlexChart1.DataToPoint(New PointF(CType(FlexChart1.AxisX.ActualMax, Single), -1.0!)))
FlexChart1.Invalidate()
End If
End Sub
Private Sub FlexChart1_Paint(sender As Object, e As PaintEventArgs) Handles FlexChart1.Paint
' 矩形の描画
e.Graphics.FillRectangle(Brushes.Aqua, New Rectangle(pos1, New Size(Math.Abs(pos2.X - pos1.X), Math.Abs(pos2.Y - pos1.Y))))
End Sub
End Class
◎サンプルコード(C#)using C1.Chart;
using C1.Win.Chart;
namespace _20191223d
{
public partial class Form1 : Form
{
Point pos1;
Point pos2;
bool isFirstTime = true;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// データの作成
DataTable dt = new DataTable("Test");
dt.Columns.Add("X", typeof(DateTime));
dt.Columns.Add("Y", typeof(float));
for(var i=0;i<5;i++)
{
dt.Rows.Add(DateTime.Today.AddDays(i), (float)(i - 2));
}
dt.AcceptChanges();
// シリーズの作成
Series series1 = new Series();
// X軸を数値にする場合
series1.DataSource = new PointF[] { new PointF(1f, -2f), new PointF(2f, -1f), new PointF(3f, 0f), new PointF(4f, -1f), new PointF(5f, 2f) };
// X軸をDateTime型にする場合
//series1.DataSource = dt;
series1.BindingX = "X";
series1.Binding = "Y";
// チャートの設定
flexChart1.Series.Clear();
flexChart1.Series.Add(series1);
flexChart1.ChartType = ChartType.LineSymbols;
}
private void FlexChart1_Rendered(object sender, RenderEventArgs e)
{
// 描画領域の取得
if (isFirstTime)
{
isFirstTime = false;
// X軸を数値にする場合
pos1 = Point.Truncate(flexChart1.DataToPoint(new PointF(1f, 1f)));
pos2 = Point.Truncate(flexChart1.DataToPoint(new PointF(5f, -1f)));
// X軸をDateTime型にする場合
//pos1 = Point.Truncate(flexChart1.DataToPoint(new PointF((float)flexChart1.AxisX.ActualMin, 1f)));
//pos2 = Point.Truncate(flexChart1.DataToPoint(new PointF((float)flexChart1.AxisX.ActualMax, -1f)));
flexChart1.Invalidate();
}
}
private void FlexChart1_Paint(object sender, PaintEventArgs e)
{
// 矩形の描画
e.Graphics.FillRectangle(Brushes.Aqua, new Rectangle(pos1, new Size(Math.Abs(pos2.X - pos1.X), Math.Abs(pos2.Y - pos1.Y))));
}
}
}
旧文書番号
85562