C# 如何对图表数据点进行分组,并为每个数据点的分组总和添加一个系列?

C# 如何对图表数据点进行分组,并为每个数据点的分组总和添加一个系列?,c#,visual-studio-2010,visual-studio,visual-studio-2012,charts,C#,Visual Studio 2010,Visual Studio,Visual Studio 2012,Charts,我试图在下图中按15分钟间隔的多个系列的数据点对数据进行分组 如图所示,有两个系列,我的程序有可能添加不同名称的无限系列。如何将相同点上不同系列的y值分组,以添加到总成本系列中?我已经试过了: chartDailyCost.DataManipulator.Group( "SUM", 15, System.Windows.Forms.DataVisualization.Charting.IntervalType.Minutes, "*"); 其中“*”显然将多个输入序列分组 下面是我用来将折线图

我试图在下图中按15分钟间隔的多个系列的数据点对数据进行分组

如图所示,有两个系列,我的程序有可能添加不同名称的无限系列。如何将相同点上不同系列的y值分组,以添加到总成本系列中?我已经试过了:

chartDailyCost.DataManipulator.Group(
"SUM", 15, System.Windows.Forms.DataVisualization.Charting.IntervalType.Minutes, "*");
其中“*”显然将多个输入序列分组 下面是我用来将折线图添加到图表中的循环:

chartDailyCost.Series.Add(textBoxApplianceName.Text);
chartDailyCost.Legends.Add(textBoxApplianceName.Text); 
chartDailyCost.Series[textBoxApplianceName.Text].ChartType = System.Windows.Forms.
    DataVisualization.Charting.SeriesChartType.Line;

while (starttime <= endtime)
{
   if ((starttime <= (Convert.ToDateTime("06:00"))) 
   && (starttime > (Convert.ToDateTime("00:00"))))
   {
     TotalCostLowPeak = TotalCost * (8.0 / 12.2);
     chartDailyCost.Series[textBoxApplianceName.Text].
                    Points.AddXY( starttime, TotalCostLowPeak);
   }
   if ((starttime <= (Convert.ToDateTime("10:00"))) 
   && (starttime > (Convert.ToDateTime("06:00"))))
   {
     TotalCostHighPeak = TotalCost * (16.1 / 12.2);
     chartDailyCost.Series[textBoxApplianceName.Text]
                   .Points.AddXY(starttime, TotalCostHighPeak);
   }
   if ((starttime <= (Convert.ToDateTime("16:00"))) 
   && (starttime > (Convert.ToDateTime("10:00"))))
   {
     chartDailyCost.Series[textBoxApplianceName.Text]
                   .Points.AddXY(starttime, TotalCost);
   }
  if ((starttime <= (Convert.ToDateTime("20:00"))) 
  && (starttime > (Convert.ToDateTime("16:00"))))
 {
   TotalCostHighPeak = TotalCost * (16.1 / 12.2);
   chartDailyCost.Series[textBoxApplianceName.Text]
                 .Points.AddXY(starttime, TotalCostHighPeak);
 }
 if ((starttime <= (Convert.ToDateTime("23:45"))) 
 && (starttime > (Convert.ToDateTime("20:00"))))
 {
     TotalCostLowPeak = TotalCost * (8.0 / 12.2);
     chartDailyCost.Series[textBoxApplianceName.Text]
                   .Points.AddXY(starttime, TotalCostLowPeak);
 }

 starttime = starttime.AddMinutes(15);
}
sumSeries(chartDailyCost);
chartDailyCost.Series.Add(textBoxApplianceName.Text);
ChartDailCost.Legends.Add(textBoxApplianceName.Text);
chartDailyCost.Series[textBoxApplianceName.Text].ChartType=System.Windows.Forms。
DataVisualization.Charting.SerieChartType.Line;

而(starttime代码示例假定您希望将所有系列的所有值相加为新系列的点。此外,所有系列都具有相同的点数和相同的
XValues

using System.Windows.Forms.DataVisualization.Charting;
...
...
void sumSeries(Chart chart)
{
    List<Series> dataSeries = chart.Series.ToList();
    Series sumSeries = chart.Series.Add("Total");
    // insert charttype and styles here!
    for (int i = 0; i < dataSeries[0].Points.Count; i++)
    {
        double sum = 0d;

        foreach (Series s in dataSeries)
        {
            sum += s.Points[i].YValues[0];
        }
        DataPoint dp = new DataPoint();
        dp.XValue = dataSeries[0].Points[i].XValue;
        dp.YValues[0] = sum;
        sumSeries.Add(dp);
    }
}
使用System.Windows.Forms.DataVisualization.Charting;
...
...
void sum系列(图表)
{
List dataSeries=chart.Series.ToList();
系列sumSeries=图表系列添加(“总计”);
//在此处插入图表类型和样式!
对于(int i=0;i

这将添加一个新的
Series sumsseries
。在第二次调用该函数以反映更新的数据之前,请确保将其删除。

我已经尝试过这个方法:结果如何?你能发布一个指向所需输出示例的链接吗?抱歉,我没有10的声誉来做这件事,基本上我希望每个系列都不这样做o在每个数据点求和,例如在01:15组(求和(系列1、系列2等),然后能够在01:15将求和的y值绘制为一个新系列,当我有该行代码时,“总计”series不显示任何数据点,当你添加一个series输出时,它会说没有足够的输出。这就是为什么我要求你发布一个链接;有很多免费的图像托管服务。那么我是否正确地理解了这一点:你想用一个级数来表示每个点上所有其他级数的值之和?听起来很简单:写一个循环在所有点和所有其他系列的循环中,求和值并将新点添加到求和系列中。数据的动态性如何?将发生很大变化?对于私有空间中的参数语句,我尝试过使用这些参数,但没有运气:私有空间sumSeries(图表DailyCost,列表)您只需调用
sumSeries(chartDailyCost)
,列表是在内部创建的。如果您想在第1个系列中求和,您可以随时修改它。嘿,很抱歉问了另一个问题,我非常感谢您的帮助,但是您能参考我原始帖子中编辑的代码以了解我使用该方法得到的错误代码吗?是的,您缺少一个using指令:
using SSystem.Windows.Forms.DataVisualization.Charting;
只有一些图表方法和成员没有它,但这是一个很好的节省空间,因为没有haig来限定长mnamespace。嘿,这太好了。该方法现在可以工作了,我正在显示总成本字段,干杯!!!但是,如图所示,现在正在按预期进行绘图,但是t我在尝试添加多个系列时也遇到了一个错误,如我所做的评论中所示,需要有一种方法来清除该系列,我尝试了一个Dispose()方法,但效果不太好。我非常感谢您!
using System.Windows.Forms.DataVisualization.Charting;
...
...
void sumSeries(Chart chart)
{
    List<Series> dataSeries = chart.Series.ToList();
    Series sumSeries = chart.Series.Add("Total");
    // insert charttype and styles here!
    for (int i = 0; i < dataSeries[0].Points.Count; i++)
    {
        double sum = 0d;

        foreach (Series s in dataSeries)
        {
            sum += s.Points[i].YValues[0];
        }
        DataPoint dp = new DataPoint();
        dp.XValue = dataSeries[0].Points[i].XValue;
        dp.YValues[0] = sum;
        sumSeries.Add(dp);
    }
}