作成日: 2026/10/09 最終更新日: 2026/10/09
文書種別
使用方法
詳細
本コンポーネントでは、マウスホィールによる組み込みのズーム操作では第1Y軸のみがズームされ、第2Y軸は自動的にズームされません。
第2Y軸もズームさせるには、第1Y軸のズームに第2Y軸の表示範囲を手動で同期させる必要があります。
そのためには、RangeChangedイベントを使用し、第1Y軸の表示範囲の変化量に応じて、第2Y軸の表示範囲を調整してください。
以下に簡単な設定例を記載します。
◎サンプルコード(VB)
Imports C1.Chart
Imports C1.Win.Chart
Public Class Form1
Private axisY2a As Axis
Private y1Min0 As Double
Private y1Max0 As Double
Private y2Min0 As Double
Private y2Max0 As Double
Public Sub New()
InitializeComponent()
' 第1Y軸(デフォルト)
FlexChart1.AxisY.AxisLine = True
FlexChart1.AxisY.Min = 0
FlexChart1.AxisY.Max = 10
FlexChart1.AxisY.MajorUnit = 2
FlexChart1.AxisY.MajorGridStyle.StrokeColor = Color.Silver
FlexChart1.AxisY.Title = "系列1"
FlexChart1.AxisY.TitleAngle = -90
' 第2Y軸
axisY2a = New Axis()
axisY2a.AxisLine = True
axisY2a.Min = 0
axisY2a.Max = 100
axisY2a.MajorUnit = 20
axisY2a.Position = Position.Right
axisY2a.Title = "系列2"
' 初期レンジを保存
y1Min0 = FlexChart1.AxisY.Min
y1Max0 = FlexChart1.AxisY.Max
y2Min0 = axisY2a.Min
y2Max0 = axisY2a.Max
' 系列1
Dim series1 As New Series() With {
.Name = "系列1",
.ChartType = ChartType.Column,
.DataSource = New Point() {
New Point(1, 2),
New Point(2, 1),
New Point(3, 4),
New Point(4, 3),
New Point(5, 5)
},
.Binding = "Y",
.BindingX = "X"
}
' 系列2
Dim series2a As New Series() With {
.Name = "系列2",
.ChartType = ChartType.LineSymbols,
.DataSource = New Point() {
New Point(1, 30),
New Point(2, 20),
New Point(3, 50),
New Point(4, 40),
New Point(5, 60)
},
.Binding = "Y",
.BindingX = "X",
.AxisY = axisY2a
}
FlexChart1.Series.Clear()
FlexChart1.Series.Add(series1)
FlexChart1.Series.Add(series2a)
FlexChart1.Legend.Position = Position.Bottom
' ズーム
Dim zoom As New C1.Win.Chart.Interaction.ZoomBehavior()
zoom.Mode = C1.Win.Chart.Interaction.GestureMode.XY
FlexChart1.Behaviors.Add(zoom)
' パン
Dim translate As New C1.Win.Chart.Interaction.TranslateBehavior()
translate.Mode = C1.Win.Chart.Interaction.GestureMode.XY
FlexChart1.Behaviors.Add(translate)
' Y軸レンジ同期
AddHandler FlexChart1.AxisY.RangeChanged, AddressOf AxisY_RangeChanged
End Sub
Private Sub AxisY_RangeChanged(sender As Object, e As EventArgs)
Dim y1 = FlexChart1.AxisY
Dim ratio As Double =
(y2Max0 - y2Min0) /
(y1Max0 - y1Min0)
axisY2a.Min = y2Min0 + (y1.Min - y1Min0) * ratio
axisY2a.Max = y2Min0 + (y1.Max - y1Min0) * ratio
End Sub
End Class
◎サンプルコード(C#)
using C1.Chart;
using C1.Win.Chart;
using System;
using System.Drawing;
using System.Windows.Forms;
namespace prj_FlexChart
{
public partial class Form1 : Form
{
Axis axisY2a;
double y1Min0, y1Max0;
double y2Min0, y2Max0;
public Form1()
{
InitializeComponent();
// 第1Y軸(デフォルト)
flexChart1.AxisY.AxisLine = true;
flexChart1.AxisY.Min = 0;
flexChart1.AxisY.Max = 10;
flexChart1.AxisY.MajorUnit = 2;
flexChart1.AxisY.MajorGridStyle.StrokeColor = Color.Silver;
flexChart1.AxisY.Title = "系列1";
flexChart1.AxisY.TitleAngle = -90;
// 第2Y軸
axisY2a = new Axis();
axisY2a.AxisLine = true;
axisY2a.Min = 0;
axisY2a.Max = 100;
axisY2a.MajorUnit = 20;
axisY2a.Position = Position.Right;
axisY2a.Title = "系列2";
// 初期レンジを保存
y1Min0 = flexChart1.AxisY.Min;
y1Max0 = flexChart1.AxisY.Max;
y2Min0 = axisY2a.Min;
y2Max0 = axisY2a.Max;
// 系列1
Series series1 = new Series()
{
Name = "系列1",
ChartType = ChartType.Column,
DataSource = new Point[]
{
new Point(1, 2),
new Point(2, 1),
new Point(3, 4),
new Point(4, 3),
new Point(5, 5)
},
Binding = "Y",
BindingX = "X"
};
// 系列2
Series series2a = new Series()
{
Name = "系列2",
ChartType = ChartType.LineSymbols,
DataSource = new Point[]
{
new Point(1, 30),
new Point(2, 20),
new Point(3, 50),
new Point(4, 40),
new Point(5, 60)
},
Binding = "Y",
BindingX = "X",
AxisY = axisY2a
};
flexChart1.Series.Clear();
flexChart1.Series.Add(series1);
flexChart1.Series.Add(series2a);
flexChart1.Legend.Position = Position.Bottom;
// ズーム
var zoom = new C1.Win.Chart.Interaction.ZoomBehavior();
zoom.Mode = C1.Win.Chart.Interaction.GestureMode.XY;
flexChart1.Behaviors.Add(zoom);
// パン
var translate = new C1.Win.Chart.Interaction.TranslateBehavior();
translate.Mode = C1.Win.Chart.Interaction.GestureMode.XY;
flexChart1.Behaviors.Add(translate);
// Y軸レンジ同期
flexChart1.AxisY.RangeChanged += AxisY_RangeChanged;
}
private void AxisY_RangeChanged(object sender, EventArgs e)
{
var y1 = flexChart1.AxisY;
double ratio =
(y2Max0 - y2Min0) /
(y1Max0 - y1Min0);
axisY2a.Min = y2Min0 + (y1.Min - y1Min0) * ratio;
axisY2a.Max = y2Min0 + (y1.Max - y1Min0) * ratio;
}
}
}