【发布时间】:2015-05-07 07:45:56
【问题描述】:
我正在尝试按间隔为 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);
在这里我尝试了 TaW 推荐的方法,但我得到了错误:
http://postimg.org/image/7pco8vrst/
using System.Windows.Forms.DataVisualization.Charting;
private void sumSeries(Chart chartDailyCost)
{
chartDailyCost.Series.Remove(chartDailyCost.Series["Total Cost"]);
List<Series> dataSeries = chartDailyCost.Series.ToList();
//this line shows an error when multiple series are added
Series sumSeries = chartDailyCost.Series.Add("Total Cost");
chartDailyCost.Series["Total Cost"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
//I have initialised many of the chart formats in the form_load method
for (int i = 1; i < dataSeries[0].Points.Count; i++)
{
double sum = 0d;
//for every series in the chart collection sum the yvalues at the specified
foreach (Series s in dataSeries)
{
sum += s.Points[i].YValues[0];
}
DataPoint dp = new DataPoint();
//Add a new yvalue to the datapoint for the summed series's
dp.XValue = dataSeries[0].Points[i].XValue;
dp.YValues[0] = sum;
sumSeries.Points.Add(dp);
}
//Add all of the data points to the "Total Cost" Series
//chartDailyCost.Series.Add(sumSeries);//Found in above coding
}
【问题讨论】:
-
我已经试过了: 结果如何?您可以发布一个链接到所需输出的示例吗?
-
抱歉,我没有 10 名声望来做到这一点,基本上我希望每个系列在每个数据点上求和,例如在 01:15 group(sum (series 1, series 2 etc...),然后能够在 01:15 将 y 值的总和绘制到一个新系列
-
在我有那行代码的那一刻,“总”系列没有显示任何数据点,当你添加一个系列输出时,它说没有足够的输出
-
这就是我要求你发布链接的原因;有很多免费的图像托管服务。所以我说得对吗:你想要一个系列来表示每个点上所有其他系列的值的总和吗?听起来很直接:在所有点上编写一个循环,并在其中对所有其他系列进行一个循环,对值求和并将新点添加到总和系列中。数据的动态性如何?会改变很多吗?
标签: c# visual-studio-2010 visual-studio visual-studio-2012 charts