在一张图表中显示两个或多个数据系列(一些数据系列为空值)

displaying two or more data series (some with empty values) in one chart

我有一个系列,每 15 分钟有一个能源消耗的十进制值,一个完整的 year.This 数据来自过去。
现在对未来的能源消耗进行了预测。但是,这里我只有一年中每小时的值。
我想叠加这两个系列以查看区别。由于第二个系列中的缺失值,因此没有一致的线。该行刚刚中断。

这是我添加第一个系列数据的地方。

dtlist.Add(new DataTable(tableIST));                            
dtlist[0].Columns.Add("Date");            
dtlist[0].Columns.Add("Volume1");
dtlist[0].PrimaryKey = new DataColumn[] { dtlist[0].Columns[0] };
DataRow dr;
Series default2 = new Series("Default");

using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString))
{                
    string query = "SELECT TIMESTAMP, LAST FROM " + tableIST;
    connection.Open();
    int i = 0;
    decimal sum = 0;
    using (SqlCommand command = new SqlCommand(query, connection))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {                            
                    dr = dtlist[0].NewRow();
                    dr["Date"] = reader.GetDateTime(0);
                    dr["Volume1"] = reader.GetDecimal(1).ToString().Replace(',', '.');                                
                    dtlist[0].Rows.Add(dr);
                    default2.Points.AddY(reader.GetDecimal(1).ToString().Replace(',', '.'));                                
                }                            
            }
        }
    }
    connection.Close();
}
chart1.DataSource = dttemp = dtlist[0];

这是我添加第二个系列数据并合并它的地方。

using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString))
{
    string query = "SELECT TIMESTAMP, LAST FROM " + tableName;                        
    connection.Open();
    using (SqlCommand command = new SqlCommand(query, connection))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                dr = dtlist[count].NewRow();
                dr["Date"] = reader.GetDateTime(0).Subtract(TimeSpan.FromDays(365));
                dr["Volume2"] = reader.GetDecimal(1).ToString().Replace(',', '.');
                dtlist[count].Rows.Add(dr);
            }
        }
    }
    connection.Close();
}

//merge data in one datatable for displaying

dttemp.Merge(dtlist[1]);

这是我的图表现在的样子。
蓝线是第一个数据系列,黄线是第二个。

它应该看起来像这样。

在第一个系列中,每 4 个值(4、15 分钟值)取平均值(这将为您提供平均小时值),现在您可以绘制图表

这是我实际使用的代码。

                DateTime helpDate;
                Decimal helpNumber = 0, helpNumber2, difference;
                DataTable dthelp = new DataTable();
                dthelp.Columns.Add("Date");
                dthelp.Columns.Add("Volume" + CountPlusOne);
                dthelp.PrimaryKey = new DataColumn[] { dthelp.Columns[0] };
                int i = 0;
                foreach (DataRow row in dtlist[count].Rows)
                {
                    if (i > 0)
                    {
                        helpNumber2 = Decimal.Parse(row["Volume" + CountPlusOne].ToString().Replace('.', ','));
                        difference = (helpNumber - helpNumber2) / 4;
                        helpDate = DateTime.Parse(row["Date"].ToString());

                        dr = dthelp.NewRow();
                        dr["Date"] = helpDate.Subtract(TimeSpan.FromMinutes(45));
                        dr["Volume" + CountPlusOne] = (helpNumber - difference).ToString().Replace(',', '.');                            
                        dthelp.Rows.Add(dr);

                        dr = dthelp.NewRow();
                        dr["Date"] = helpDate.Subtract(TimeSpan.FromMinutes(30));
                        dr["Volume" + CountPlusOne] = (helpNumber - difference * 2).ToString().Replace(',', '.');                            
                        dthelp.Rows.Add(dr);

                        dr = dthelp.NewRow();
                        dr["Date"] = helpDate.Subtract(TimeSpan.FromMinutes(15));
                        dr["Volume" + CountPlusOne] = (helpNumber - difference * 3).ToString().Replace(',', '.');
                        dthelp.Rows.Add(dr);
                    }
                    i++;
                    helpNumber = Decimal.Parse(row["Volume" + CountPlusOne].ToString().Replace('.', ','));
                }