저는 beto-rodriguez의 WPF 용 라이브 차트를 사용하고 있습니다. 나는 XML 파일로부터 차트를위한 데이터를 얻고, 차트 하나를 위에 그린다. 데이터를 나타내는 차트는 X 축에 같은 수의 스폿을 가지고 ZOOM과 PAN은 ch.Zoom = ZoomingOptions.X로 활성화된다. 및 ch.Pan = PanningOptions.X; 내 질문에 해당 차트 중 하나 (그게 중요하지 않습니다) 확대 및 팬 및 그 모든 세로 또는 X 축 정렬 할 수 있도록 확대 또는 패닝 할 수 있습니까? 기본적으로 한 차트에서 확대/축소 또는 이동하는 경우 다른 모든 차트는 같은 시간에 같은 양만큼 확대/축소 및 이동해야합니다.라이브 차트 라이브러리를 사용하여 여러 차트를 확대/축소하는 방법
0
A
답변
0
은 당신이해야 할 것은 당신이 그 축에 대한 새로운 최소 및 최대 값을 추출 할 수있는 이벤트 핸들러에서 각 그래프 '축
<lvc:CartesianChart.AxisX>
<lvc:Axis Title="Time" RangeChanged="Axis_RangeChanged" Separator="{x:Static lvc:DefaultAxes.CleanSeparator}" DisableAnimations="True" />
</lvc:CartesianChart.AxisX>
의 이벤트 "RangeChanged"에 대한 이벤트 핸들러를 생성하고 이 명령을 사용하여 바인딩에 의해 다른 멋진 방법이 될 수도 있지만 적어도 당신이 시작 얻을 것이다
private void Axis_RangeChanged(LiveCharts.Events.RangeChangedEventArgs eventArgs)
{
//sync the graphs
double min = ((Axis)eventArgs.Axis).MinValue;
double max= ((Axis)eventArgs.Axis).MaxValue;
this.lvcChart2.AxisX[0].MinValue = min;
this.lvcChart2.AxisX[0].MaxValue = max;
this.lvcChart.AxisX[0].MinValue = min;
this.lvcChart.AxisX[0].MaxValue = max;
//Repeat for as many graphs as you have
}
페이지에 당신이 가진 모든 그래프에 적용합니다.
0
나는 팬을 관리하고 X 축을 수직으로 줌한다. 는 첫째로 나는 XML을 읽고
Axis axisX = new Axis();
Axis axisY = new Axis();
axisX.Name = "X";
axisY.Name = "Y";
다음 @Kevin 같은 범위의 변화에 해고되는 이벤트를 만들 livecharts 라이브러리 준비 나는 동적 차트를 작성하고 이름 축마다 제공되는 객체를 생성하는 클래스를 생성 로스 언급 한 후 축이 이벤트의 모든 축 통해 루프 및 확인 이름에 대한 방법과 같은 MINVALUE 및 maxValue를 변경 : 런타임에 그래프를 추가하지 않는 한
void axisX_RangeChanged(LiveCharts.Events.RangeChangedEventArgs eventArgs)
{
double min = ((Axis)eventArgs.Axis).MinValue;
double max = ((Axis)eventArgs.Axis).MaxValue;
int p = 0;
string name;
foreach (Axis CartChart in FindVisualChildren<Axis>(TestGrid))
{
// do something with CartChart here
name = CartChart.Name;
if (name == "Y")
{
continue;
}
else if (name == "X")
{
CartChart.MinValue = min;
CartChart.MaxValue = max;
}
p++;
}
}
나는 목록에서 차트를 캐시 것 코드가 있으므로 루프가 호출 될 때마다 시각적 트리를 탐색 할 필요가 없습니다. 이것이 많이 불리는 경우 성능 병목 현상이 될 수 있습니다. –
예 그래프의 수를 처음부터 알지 못하기 때문에 런타임에 그래프를 추가하고 있습니다. .add() 메서드는 병목 현상을 일으킬 수 있지만 다른 방법은 없다고 생각합니다. – LBajlo
예.하지만 일단 추가하면 캐시 할 것이므로 모든 루프마다 트리를 걷지 않을 것입니다. 폼의 수명 동안 추가/제거하면 캐시가 무효화되고 다시로드됩니다. –