#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
Также важно увеличить обе оси с одинаковым коэффициентом масштабирования!
Это гарантирует равные масштабы по обеим осям и сохранение соотношения сторон за счет масштабирования.