В 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