oxyplot - 图表两侧的 Y 轴
oxyplot - Y axis on both sides of chart
我正在使用 oxyplot 库创建时间序列图表。我正在尝试创建一个两边都有相同 y 轴的图,只要我不与图交互以缩放或平移,它就可以正常工作,这是我的代码
model.Axes.Add(new LinearAxis()
{
MajorStep = 0.1,
Minimum = 0,
Maximum = 1,
Position = AxisPosition.Left,
Title = "Title Axis",
AxisTitleDistance = 10
});
model.Axes.Add(new LinearAxis()
{
Key = "RightYAxis"
MajorStep = 0.1,
Minimum = 0,
Maximum = 1,
Position = AxisPosition.Right
});
DateTimeAxis dta = new DateTimeAxis()
{
Key = "DateTimeAxis",
IntervalType = SetDateTimeIntervalType(minDate, maxDate),
StringFormat = "dd/MM/yyyy",
Position = AxisPosition.Bottom,
Minimum = DateTimeAxis.ToDouble(minDate),
Maximum = DateTimeAxis.ToDouble(maxDate),
Title = "Date",
AxisTitleDistance = 10
};
dta.AxisChanged += new EventHandler<AxisChangedEventArgs>(AxisChanged);
model.Axes.Add(dta);
当我与绘图交互时,只有左侧 y 轴和底部轴适当缩放。当我在左 y 轴之前添加右 y 轴时,底部和右侧轴正在缩放。
我需要设置什么设置才能相应地缩放两个 y 轴而不是一个?
我认为没有 build-in 设置。我过去也遇到过类似的问题,也曾寻找过这样的功能,但没有找到。 OxyPlot 演示浏览器中也没有这样的例子。直接的——但不是很优雅的方法——是将事件处理程序也附加到左轴,将最小值和最大值设置为右轴。您的示例将如下所示:
Axis leftAxis = new LinearAxis()
{
MajorStep = 0.1,
Minimum = 0,
Maximum = 1,
Position = AxisPosition.Left,
Title = "Title Axis",
AxisTitleDistance = 10
});
leftAxis.AxisChanged += LeftAxis_AxisChanged;
model.Axes.Add(leftAxis);
model.Axes.Add(new LinearAxis()
{
Key = "RightYAxis"
MajorStep = 0.1,
Minimum = 0,
Maximum = 1,
Position = AxisPosition.Right
});
DateTimeAxis dta = new DateTimeAxis()
{
Key = "DateTimeAxis",
IntervalType = SetDateTimeIntervalType(minDate, maxDate),
StringFormat = "dd/MM/yyyy",
Position = AxisPosition.Bottom,
Minimum = DateTimeAxis.ToDouble(minDate),
Maximum = DateTimeAxis.ToDouble(maxDate),
Title = "Date",
AxisTitleDistance = 10
};
dta.AxisChanged += new EventHandler<AxisChangedEventArgs>(AxisChanged);
model.Axes.Add(dta);
事件处理程序看起来像
private void LeftAxis_AxisChanged(object sender, AxisChangedEventArgs e)
{
Axis leftAxis = sender as Axis;
Axis rightAxis = leftAxis.PlotModel.Axes.First(a => a.Position == AxisPosition.Right);
rightAxis.Maximum = leftAxis.ActualMaximum;
rightAxis.Minimum = leftAxis.ActualMinimum;
}
我正在使用 oxyplot 库创建时间序列图表。我正在尝试创建一个两边都有相同 y 轴的图,只要我不与图交互以缩放或平移,它就可以正常工作,这是我的代码
model.Axes.Add(new LinearAxis()
{
MajorStep = 0.1,
Minimum = 0,
Maximum = 1,
Position = AxisPosition.Left,
Title = "Title Axis",
AxisTitleDistance = 10
});
model.Axes.Add(new LinearAxis()
{
Key = "RightYAxis"
MajorStep = 0.1,
Minimum = 0,
Maximum = 1,
Position = AxisPosition.Right
});
DateTimeAxis dta = new DateTimeAxis()
{
Key = "DateTimeAxis",
IntervalType = SetDateTimeIntervalType(minDate, maxDate),
StringFormat = "dd/MM/yyyy",
Position = AxisPosition.Bottom,
Minimum = DateTimeAxis.ToDouble(minDate),
Maximum = DateTimeAxis.ToDouble(maxDate),
Title = "Date",
AxisTitleDistance = 10
};
dta.AxisChanged += new EventHandler<AxisChangedEventArgs>(AxisChanged);
model.Axes.Add(dta);
当我与绘图交互时,只有左侧 y 轴和底部轴适当缩放。当我在左 y 轴之前添加右 y 轴时,底部和右侧轴正在缩放。
我需要设置什么设置才能相应地缩放两个 y 轴而不是一个?
我认为没有 build-in 设置。我过去也遇到过类似的问题,也曾寻找过这样的功能,但没有找到。 OxyPlot 演示浏览器中也没有这样的例子。直接的——但不是很优雅的方法——是将事件处理程序也附加到左轴,将最小值和最大值设置为右轴。您的示例将如下所示:
Axis leftAxis = new LinearAxis()
{
MajorStep = 0.1,
Minimum = 0,
Maximum = 1,
Position = AxisPosition.Left,
Title = "Title Axis",
AxisTitleDistance = 10
});
leftAxis.AxisChanged += LeftAxis_AxisChanged;
model.Axes.Add(leftAxis);
model.Axes.Add(new LinearAxis()
{
Key = "RightYAxis"
MajorStep = 0.1,
Minimum = 0,
Maximum = 1,
Position = AxisPosition.Right
});
DateTimeAxis dta = new DateTimeAxis()
{
Key = "DateTimeAxis",
IntervalType = SetDateTimeIntervalType(minDate, maxDate),
StringFormat = "dd/MM/yyyy",
Position = AxisPosition.Bottom,
Minimum = DateTimeAxis.ToDouble(minDate),
Maximum = DateTimeAxis.ToDouble(maxDate),
Title = "Date",
AxisTitleDistance = 10
};
dta.AxisChanged += new EventHandler<AxisChangedEventArgs>(AxisChanged);
model.Axes.Add(dta);
事件处理程序看起来像
private void LeftAxis_AxisChanged(object sender, AxisChangedEventArgs e)
{
Axis leftAxis = sender as Axis;
Axis rightAxis = leftAxis.PlotModel.Axes.First(a => a.Position == AxisPosition.Right);
rightAxis.Maximum = leftAxis.ActualMaximum;
rightAxis.Minimum = leftAxis.ActualMinimum;
}