WPF OxyPlot 缩放问题
WPF OxyPlot Zooming issue
为了在 X 和 Y 两个轴上具有相同的比例,我使用了 PlotType.Cartesian
以确保:
_model = new PlotModel();
_model.PlotType = PlotType.Cartesian;
我也可以放大和缩小图表。
为了控制缩放,我需要在两个轴上设置 AbsoluteMinimum
和 AbsoluteMaximum
并指定最小和最大范围。
我遇到的问题:缩放时如何保持相同的比例?因为轴是独立缩放的,而且通常一个轴与另一个轴不同步(当一个轴达到极限而另一个仍然可以扩展时)。
此外,如何为两个轴设置适当的值,因为如果我设置所有最小值和最大值,我希望在其他轴上设置相应的值,如果我使用 PlotType.Cartesian
,但它不会发生 - 这就是问题出现的原因,因为我无法为两个轴设置适当的值。
我能得到的最接近的是:
订阅 PlotView
的 Loaded
事件(在本例中为 _model
字段)
在该方法中得到 ActualHeight
和 ActualWidth
of PlotView
有了绘图区域的大小,可以选择所需轴的最小值和最大值,然后进行所有需要的计算以保持两个轴上的比例相同。例如:
double xMin = -500;
double xMax = 800;
double xRange = xMax - xMin;
double yRange = xRange / ActualWidth * ActualHeight;
double yMin = 58;
double yMax = yMin + yRange;
_model.Axes[0].Minimum = xMin;
_model.Axes[0].AbsoluteMinimum = xMin;
_model.Axes[0].Maximum = xMax;
_model.Axes[0].AbsoluteMaximum = xMax;
// Analogically, define limits of Y axe
同样重要的是用相同的缩放因子缩放两个轴!
这将保证两个轴上的比例相等,并通过缩放保持纵横比。
为了在 X 和 Y 两个轴上具有相同的比例,我使用了 PlotType.Cartesian
以确保:
_model = new PlotModel();
_model.PlotType = PlotType.Cartesian;
我也可以放大和缩小图表。
为了控制缩放,我需要在两个轴上设置 AbsoluteMinimum
和 AbsoluteMaximum
并指定最小和最大范围。
我遇到的问题:缩放时如何保持相同的比例?因为轴是独立缩放的,而且通常一个轴与另一个轴不同步(当一个轴达到极限而另一个仍然可以扩展时)。
此外,如何为两个轴设置适当的值,因为如果我设置所有最小值和最大值,我希望在其他轴上设置相应的值,如果我使用 PlotType.Cartesian
,但它不会发生 - 这就是问题出现的原因,因为我无法为两个轴设置适当的值。
我能得到的最接近的是:
订阅
PlotView
的Loaded
事件(在本例中为_model
字段)在该方法中得到
ActualHeight
和ActualWidth
ofPlotView
有了绘图区域的大小,可以选择所需轴的最小值和最大值,然后进行所有需要的计算以保持两个轴上的比例相同。例如:
double xMin = -500;
double xMax = 800;
double xRange = xMax - xMin;
double yRange = xRange / ActualWidth * ActualHeight;
double yMin = 58;
double yMax = yMin + yRange;
_model.Axes[0].Minimum = xMin;
_model.Axes[0].AbsoluteMinimum = xMin;
_model.Axes[0].Maximum = xMax;
_model.Axes[0].AbsoluteMaximum = xMax;
// Analogically, define limits of Y axe
同样重要的是用相同的缩放因子缩放两个轴!
这将保证两个轴上的比例相等,并通过缩放保持纵横比。