DynamicDataDisplay Line Graph плоттер с несколькими источниками данных?
Я пытаюсь нанести несколько кривых разного цвета на график. В настоящее время я использую один плоттер (не уверен, что это сработает, и именно поэтому я размещаю тему здесь), и вот мой код:
if (_dataXChA != null && _dataXChA.Length > 1)
{
EnumerableDataSource<double> xChA = new EnumerableDataSource<double>(_dataXChA);
xChA.SetXMapping(xVal => xVal);
if (_dataYChA != null && _dataYChA.Length == _dataXChA.Length)
{
EnumerableDataSource<double> yChA = new EnumerableDataSource<double>(_dataYChA);
yChA.SetYMapping(yVal => yVal);
CompositeDataSource dsChA = new CompositeDataSource(xChA, yChA);
((LineGraph)plotter.Children.ElementAt(startIndex)).DataSource = dsChA;
plotter.FitToView();
}
}
if (_dataXChB != null && _dataXChB.Length > 1)
{
EnumerableDataSource<double> xChB = new EnumerableDataSource<double>(_dataXChB);
xChB.SetXMapping(xVal => xVal);
if (_dataYChB != null && _dataYChB.Length == _dataXChB.Length)
{
EnumerableDataSource<double> yChB = new EnumerableDataSource<double>(_dataYChB);
yChB.SetYMapping(yVal => yVal);
CompositeDataSource dsChB = new CompositeDataSource(xChB, yChB);
((LineGraph)plotter.Children.ElementAt(startIndex)).DataSource = dsChB;
//LineGraph lgChA = plotter.AddLineGraph(dsChB, _dataBrushColorChB, 1, "Data");
plotter.FitToView();
}
}
Первая кривая должна быть зеленого цвета, а вторая кривая должна быть красного цвета. plotter
является CharterPlotter
Но когда я смотрю на график, я получаю только одну кривую. Затем я посмотрел на данные, кажется, что кривая отображает данные из второго источника данных, но цвет кривой - зеленый.
Конструктор назначает цвет следующим образом:
LineGraph lgChA = plotter.AddLineGraph(dsChA, _dataBrushColorChA, 1, "Data");
LineGraph lgChB = plotter.AddLineGraph(dsChB, _dataBrushColorChB, 1, "Data");
где,
_dataBrushColorChA = Colors.Green;
_dataBrushColorChB = Colors.Red;
По сути, я обновляю данные только каждый раз, когда происходит событие, потому что я пытался AddLineGraph()
, но оказалось, что это очень медленно, поэтому я обновляю только точки данных. Итак, кто-нибудь дает мне какие-либо указатели? Как я могу справиться с этой ситуацией с несколькими источниками данных?
1 ответ
Похоже, вы устанавливаете источник данных для того же дочернего элемента плоттера в startIndex
для обоих каналов:
((LineGraph)plotter.Children.ElementAt(startIndex)).DataSource = dsChA;
...
((LineGraph)plotter.Children.ElementAt(startIndex)).DataSource = dsChB;
Второе назначение приведет к DataSource
быть отвергнутым dsChB
, что позволило бы отображать только одну строку.
Может быть, индекс должен быть разным для A и B?