Проблема с масштабированием WPF OxyPlot

#c# #wpf #oxyplot

#c# #wpf ( ВП ) #оксиплот #wpf #оксиплота

Вопрос:

Чтобы иметь одинаковый масштаб по обеим осям, X и Y, я использовал PlotType.Cartesian , который гарантирует, что:

 _model = new PlotModel();
_model.PlotType = PlotType.Cartesian;
  

У меня также есть возможность увеличивать и уменьшать масштаб диаграмм.

Чтобы управлять масштабированием, мне нужно установить AbsoluteMinimum и AbsoluteMaximum на обеих осях и указать минимальный и максимальный диапазон.

Проблемы, которые у меня есть: как сохранить тот же масштаб при масштабировании? Потому что оси масштабируются независимо, и часто одна ось не синхронизирована с другой осью (когда одна достигает своих пределов, а другая все еще может расширяться).

Также, как установить соответствующие значения для обеих осей, потому что, если я установлю все минимумы и максимумы, я ожидал, что будут установлены соответствующие значения на других осях, если я использую PlotType.Cartesian , но этого не происходит — это причина возникновения проблемы, потому что я не могу установить соответствующие значения для обеих осей.

Ответ №1:

Самое близкое, что я мог бы получить, это:

  • подписаться на Loaded событие PlotView ( _model поле в данном случае)

  • в этом методе получаем ActualHeight и ActualWidth из 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
  

Также важно увеличить обе оси с одинаковым коэффициентом масштабирования!

Это гарантирует равные масштабы по обеим осям и сохранение соотношения сторон за счет масштабирования.