Плоттер 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(), но он оказался очень медленным, поэтому я обновляю только точки данных. Итак, кто-нибудь дает мне какие-либо указатели? Как я могу справиться с этой ситуацией с несколькими источниками данных?


person Nick Tsui    schedule 03.01.2013    source источник
comment
Я предполагаю, что это библиотека D3, верно?   -  person WildCrustacean    schedule 03.01.2013
comment
Я думаю, что это. Плоттер представляет собой DynamicDataDisplay.CharterPlotter.   -  person Nick Tsui    schedule 03.01.2013
comment
Это предположение, но похоже, что вы устанавливаете источник данных для одного и того же дочернего элемента плоттера в startIndex оба раза: ((LineGraph)plotter.Children.ElementAt(startIndex)).DataSource =, может быть, индекс должен быть другим для A и B? Это может быть рисование обеих кривых прямо друг над другом, если они привязаны к одному и тому же источнику данных.   -  person WildCrustacean    schedule 03.01.2013
comment
Да, я изменил startIndex, сделав их из двух точек, которые находятся рядом друг с другом, и теперь они обе отображаются! Большое спасибо. Можете ли вы опубликовать свой ответ, и я приму его. :)   -  person Nick Tsui    schedule 03.01.2013
comment
Еще один вопрос, я могу изменить источник данных, но могу ли я изменить цвет кисти?   -  person Nick Tsui    schedule 03.01.2013
comment
Итак, теперь у вас есть две линии, но они одного цвета?   -  person WildCrustacean    schedule 03.01.2013


Ответы (1)


Похоже, вы устанавливаете источник данных для одного и того же дочернего элемента плоттера в startIndex для обоих каналов:

((LineGraph)plotter.Children.ElementAt(startIndex)).DataSource = dsChA;

...

((LineGraph)plotter.Children.ElementAt(startIndex)).DataSource = dsChB;

Второе назначение приведет к тому, что DataSource будет переопределено dsChB, что заставит отображать только одну строку.

Может быть, индекс должен быть разным для A и B?

person WildCrustacean    schedule 03.01.2013
comment
Это проблема индекса. Большое спасибо! - person Nick Tsui; 15.02.2013