Оксиплот - отредактируйте ярлык левой кнопкой мыши в LineSeries - PullRequest
0 голосов
/ 20 ноября 2018

Я строю несколько разных LineSeries в Oxyplot (в C #, используя Windows Forms), у которых все дико разные диапазоны.Чтобы все серии оставались видимыми, я масштабирую все их значения в диапазоне от 0 до 1. Конечно, проблема в том, что фактические значения серии больше не могут отображаться, поэтому я подумал, возможно лиизмените событие левого щелчка, которое отображает значения X и Y для DataPoint, чтобы исправить это.Если возможно, я бы хотел, чтобы, когда пользователь нажимает на точку данных, отображаемое значение Y уменьшалось до исходного значения, а график оставался уменьшенным.

Например, у меня естьЗначение Na + в диапазоне от 130 до 150, которое я затем масштабирую до 0 и 1. Но когда пользователь нажимает на точку данных, я хочу, чтобы она отображала Y = 140, а не 0,5.Поскольку каждый LineSeries имеет свой коэффициент масштабирования, это также означает, что мне придется редактировать метку для каждой серии отдельно.

Итак, возможно ли что-то подобное в текущей версии?Заранее спасибо!

Редактировать: Я понял, см мой ответ ниже!

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Я не уверен, должен ли я ответить на свой вопрос, но я все понял.Так или иначе, оказывается, что я не могу получить доступ ни к одному из необходимых свойств, поэтому я просто создал свой собственный класс для точек данных и включил свойство для масштабированного значения.Оказывается, что Tracker способен отображать другие свойства точек данных, но стандартные точки данных имеют только X и Y. Затем я изменил TrackerFormatString, чтобы показывать масштабированное значение вместо фактического.

        public class MeasurePoint : IDataPointProvider
    {
        public MeasurePoint(double x, double y, double scale)
        {
            X = x; Y = y; Scale = scale;
        }

        public double X { get; set; }
        public double Y { get; set; }
        public double Scale { get; set; }
        public DataPoint GetDataPoint()
        {
            return new DataPoint(X, Y);
        }
    }

Это класс, который я создал, и именно так я в итоге обработал точки.

            var points = new MeasurePoint[Y.Count - 1];
        for (int i = 0; i < Y.Count; i++)
        {
            points[i] = new MeasurePoint(DateTimeAxis.ToDouble(X[i]), Y[i], Y[i]*scale);
        }
        Series.ItemsSource = points;
        Series.TrackerFormatString = "{0}\n{2}\n{Scale}";

масштаб - это коэффициент, на который я делю значения перед построением графика, а TrackerFormatString - {0} имя сериии {2} является значением X.

Прекрасно работает!

0 голосов
/ 20 ноября 2018

Вы не можете напрямую изменять отображаемые данные, однако вы можете прослушивать событие mousedown в oxyplot следующим образом:

var model= new PlotModel();
model.MouseDown += Model_MouseDown;

private void Model_MouseDown(object sender, OxyMouseDownEventArgs e)
{
    var controller = sender as PlotController;
    var position = e.HitTestResult;
}

При значениях position вы можете вычислить обратно к фактическомуоценить и показать его где-нибудь еще.

...