private PlotModel SetupTotalBooksReadByLanguagePlot() { // Create the plot model var newPlot = new PlotModel { Title = "Total Books Read by Language With Time Plot" }; OxyPlotUtilities.SetupPlotLegend(newPlot, "Total Books Read by Language With Time Plot"); SetupTotalBooksReadKeyVsTimeAxes(newPlot); // get the languages (in order) BooksDelta.DeltaTally latestTally = _mainModel.BookDeltas.Last().OverallTally; List <string> languages = (from item in latestTally.LanguageTotals orderby item.Item2 descending select item.Item1).ToList(); // create the series for the languages List <KeyValuePair <string, AreaSeries> > languagesSeries = new List <KeyValuePair <string, AreaSeries> >(); List <KeyValuePair <string, LineSeries> > languagesLineSeries = new List <KeyValuePair <string, LineSeries> >(); for (int i = 0; i < languages.Count; i++) { AreaSeries languageSeries; OxyPlotUtilities.CreateLongAreaSeries(out languageSeries, ChartAxisKeys.DateKey, ChartAxisKeys.TotalBooksReadKey, languages[i], i, 128); languagesSeries.Add( new KeyValuePair <string, AreaSeries>(languages[i], languageSeries)); LineSeries languageLineSeries; OxyPlotUtilities.CreateLongLineSeries(out languageLineSeries, ChartAxisKeys.DateKey, ChartAxisKeys.TotalBooksReadKey, languages[i], i, 128); languagesLineSeries.Add( new KeyValuePair <string, LineSeries>(languages[i], languageLineSeries)); //if (i > 1) break; } // loop through the deltas adding points for each of the items to the lines foreach (var delta in _mainModel.BookDeltas) { var date = DateTimeAxis.ToDouble(delta.Date); foreach (var languageLine in languagesLineSeries) { double ttl = 0.0; foreach (var langTotal in delta.OverallTally.LanguageTotals) { if (langTotal.Item1 == languageLine.Key) { ttl = langTotal.Item2; } } languageLine.Value.Points.Add(new DataPoint(date, ttl)); } } IList <LineSeries> lineSeriesSet = (from item in languagesLineSeries select item.Value).ToList(); var stackSeries = OxyPlotUtilities.StackLineSeries(lineSeriesSet); // add them to the plot foreach (var languageItems in stackSeries) { newPlot.Series.Add(languageItems); } // finally update the model with the new plot return(newPlot); }