2014-10-09 19 views
5

Sto creando diverse serie di linee per un controllo grafico in DevExpress in fase di esecuzione. La serie deve essere creata in fase di esecuzione poiché il numero di serie può variare rispetto alla query di dati eseguita. Ecco come ho creato la serie:Accumula valori in serie di grafici - WPF DevExpress

foreach (var item in lstSPCPrintID) 
{ 
    string seriesName = Convert.ToString(item); 
    LineSeries2D series = new LineSeries2D(); 
    dxcSPCDiagram.Series.Add(series); 

    series.DisplayName = seriesName; 

    var meas = from x in lstSPCChart 
       where x.intSPCPrintID == item 
       select new { x.intSPCMeas }; 

    foreach (var item2 in meas) 
    { 
     series.Points.Add(new SeriesPoint(item2.intSPCMeas)); 
    } 
} 

Questo accade all'interno di un evento BackgroundWorker completato e tutti i dati necessari è nei relativi elenchi. Nell'istanza di test in cui sono in esecuzione, vengono create 6 serie.

Ogni serie consiste in alcune misurazioni di test che ho bisogno nell'asse x. Queste misurazioni possono avere lo stesso valore (e hanno lo stesso valore in molti casi). Quello che voglio allora è che l'asse y contenga il conteggio di quante volte una misura è per esempio -21. Questo alla fine creerà una curva.

In questo momento creo un punto di serie per ogni misurazione, ma non so come gestire ArgumentDataMember/ValueDataMember in questo scenario specifico. C'è un modo per il grafico di eseguire automaticamente il conteggio o devo farlo manualmente? Qualcuno può aiutarmi a tornare in pista?

risposta

1

Ho finito per fare un conteggio distinto delle misurazioni prima di aggiungere i punti della serie.

foreach (var item in lstSPCPrintID)    
{ 
    string seriesName = String.Format("Position: {0}", Convert.ToString(item)); 
    LineStackedSeries2D series = new LineStackedSeries2D(); 
    series.ArgumentScaleType = ScaleType.Numerical; 
    series.DisplayName = seriesName; 
    series.SeriesAnimation = new Line2DUnwindAnimation(); 

    var meas = from x in lstSPCChart 
       where x.intSPCPrintID == item 
       select new { x.dblSPCMeas }; 

    var measDistinctCount = meas.GroupBy(x => x.dblSPCMeas).Select(group => new { Meas = group.Key, Count = group.Count() }).OrderBy(y => y.Meas); 

    foreach (var item2 in measDistinctCount) 
    { 
     series.Points.Add(new SeriesPoint(item2.Meas, item2.Count)); 
    } 

    dxcSPCDiagram.Series.Add(series); 

    series.Animate(); 
} 
Problemi correlati