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?

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