В lightningChart, как я могу заблокировать ось Y двух или более осей, чтобы ноль всегда был синхронизирован?

Мне нужно отобразить напряжение и ток на одном 2D графике (LightningChart.ViewXY). Чтобы сохранить значения в видимой пропорции, я использую 2 разные оси. Но мои клиенты и я хотели бы убедиться, что ноль всегда будет совмещен между двумя разными осями. Возможно ли это, и если да, то как я могу это сделать?

2 ответа

Решение

Спасибо Эрик за вопрос. Диаграмма и оси имеют события, которые помогут вам в индивидуальной обработке таких случаев. Насколько помню, нет свойства для нескольких YAx в одном и том же горизонтальном положении, например, Zoomed, Panned event handle и соответственно изменить диапазон оси. Ниже приведен пример, как установить опорное значение двух осей (одного сегмента) в середине области графика.

    private void ViewXY_Zoomed(object sender, Arction.Wpf.Charting.Views.ViewXY.ZoomedXYEventArgs e)
    {
        AxisY axis0 = _chart.ViewXY.YAxes[0];
        AxisY axis1 = _chart.ViewXY.YAxes[1];

        // get segment top & bottom coordinates [PX]
        GraphSegmentInfo gsi = _chart.ViewXY.GetGraphSegmentInfo();
        float fTop = gsi.SegmentTops[0];
        float fBottom = gsi.SegmentBottoms[0];

        int iScreenCoordForRefValue = (int)(fTop + fBottom) / 2;
        float fAxis0RefValue = 50, fAxis1RefValue = 0;

        double dAxis0ValueAtCoord, dAxis1ValueAtCoord;
        axis0.CoordToValue(iScreenCoordForRefValue, out dAxis0ValueAtCoord, false);
        axis1.CoordToValue(iScreenCoordForRefValue, out dAxis1ValueAtCoord, false);

        // pan Axis' RefValue position at RefScreenCoord
        double dNewMinAxis0 = axis0.Minimum - (dAxis0ValueAtCoord - fAxis0RefValue);
        double dNewMaxAxis0 = axis0.Maximum - (dAxis0ValueAtCoord - fAxis0RefValue);
        double dNewMinAxis1 = axis1.Minimum - (dAxis1ValueAtCoord - fAxis1RefValue);
        double dNewMaxAxis1 = axis1.Maximum - (dAxis1ValueAtCoord - fAxis1RefValue);

        _chart.BeginUpdate();

        axis0.SetRange(dNewMinAxis0, dNewMaxAxis0);
        axis1.SetRange(dNewMinAxis1, dNewMaxAxis1);

        _chart.EndUpdate();
    }
      function alignChartHorizontally(chart) {
    chart.getDefaultAxisY().setThickness({
        min: 60
    })
}

if(yourFirstChart.show) alignChartHorizontally(yourFirstChart)
if(yourSecondChart.show) alignChartHorizontally(yourSeconcChart) 


// Synchronize all X Axes.
let isAxisXScaleChangeActive = false
const syncAxisXEventHandler = (axis, start, end) => {
   if (isAxisXScaleChangeActive) return
   isAxisXScaleChangeActive = true

   // Find all other X Axes.
   const otherAxes = allCharts
      .map(chart => chart.getDefaultAxisX())
      .filter(axis2 => axis2 !== axis)

   // Sync other X Axis intervals.  
   otherAxes.forEach((axis) => axis
      .setInterval(start, end, false, true)
   )

   isAxisXScaleChangeActive = false
}

//add both (or all) of your charts to this array:
allCharts = [myChart1, myChart2]

//adds event listener and handler to all your charts' scaleChange event emitters
allCharts.forEach(chart => chart.getDefaultAxisX().onScaleChange((start, end) => syncAxisXEventHandler(chart.getDefaultAxisX(), start, end)))

Взято из: https://github.com/Arction/lcjs-showcase-trading/blob/master/src/app.ts

Другие вопросы по тегам