OxyPlot时间序列图表两侧Y轴同步缩放配置问题
解决OxyPlot两侧Y轴同步缩放的问题
这个问题的核心是OxyPlot默认会将每个轴视为独立的交互对象,缩放/平移时只会联动和当前操作轴关联的一组轴。要让左右两侧Y轴同步响应底部时间轴的交互,只需要给两个Y轴设置相同的ZoomKey属性即可——这个属性会把多个轴归入同一个缩放组,交互时组内所有轴都会同步调整范围。
修改后的代码示例
// 左侧Y轴:添加统一的缩放组Key model.Axes.Add(new LinearAxis() { MajorStep = 0.1, Minimum = 0, Maximum = 1, Position = AxisPosition.Left, Title = "Title Axis", AxisTitleDistance = 10, ZoomKey = "SharedYAxis" // 标记为同一缩放组 }); // 右侧Y轴:设置和左侧相同的ZoomKey model.Axes.Add(new LinearAxis() { Key = "RightYAxis", MajorStep = 0.1, Minimum = 0, Maximum = 1, Position = AxisPosition.Right, ZoomKey = "SharedYAxis" // 加入同一缩放组 }); 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);
原理说明
ZoomKey是OxyPlot中用于轴分组的核心属性,同一Key下的轴会同步响应缩放、平移等交互操作。- 确保两个Y轴的初始
Minimum和Maximum值完全一致,这样在交互前就保持刻度同步,交互过程中也会始终保持范围匹配。 - 这个设置对缩放和平移操作都生效:不管你操作底部时间轴还是任意一侧Y轴,两侧Y轴都会同步变化。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

