在 lightningChart 中,如何锁定 2 个或更多轴的 Y 轴以使零始终保持同步?
In lightningChart, how can I lock the Y axis of 2 or more axes in order to keep the zero always in sync?
我需要在同一个二维图形上显示电压和电流 (LightningChart.ViewXY)。为了保持可见比例的值,我使用了 2 个不同的轴。但我的客户和我想确保零始终在 2 个不同的轴之间对齐。这可能吗?如果可以,我该怎么做?
感谢 Eric 提出这个问题。
图表和坐标轴具有可帮助您自定义处理此类情况的事件。
请记住,在同一水平位置的多个 YAxes 没有 属性,例如Zoomed、Panned 事件处理并相应地修改 Axis 的范围。下面是如何将两个轴(同一段)的参考值固定到图形区域中间的示例。
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();
}
我需要在同一个二维图形上显示电压和电流 (LightningChart.ViewXY)。为了保持可见比例的值,我使用了 2 个不同的轴。但我的客户和我想确保零始终在 2 个不同的轴之间对齐。这可能吗?如果可以,我该怎么做?
感谢 Eric 提出这个问题。 图表和坐标轴具有可帮助您自定义处理此类情况的事件。 请记住,在同一水平位置的多个 YAxes 没有 属性,例如Zoomed、Panned 事件处理并相应地修改 Axis 的范围。下面是如何将两个轴(同一段)的参考值固定到图形区域中间的示例。
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();
}