C#图表-难以绘制具有不同频率的时间序列

时间:2018-12-02 20:32:19

标签: c# time-series mschart

这是我在这里的第一篇文章。我正在尝试创建一个“简单”的制图程序(基于c#的Windows窗体)。我之所以说简单,是因为我目前只玩最多2个系列,以及一些变换(变化百分比,实际变化,移动平均数和移动总和)。它将变得比这更复杂,但是首先具有有限的功能可能有助于我更好地处理所有这些在C#中的工作方式。

我已经搜寻了几天,但是到目前为止,我的具体情况还算不上运气。我会尽量详细。用户从SQL Server检索时间序列数据。该程序的这一部分行为符合预期。我正在创建2个查询(每个系列一个)来分别检索数据。我在SQL查询中进行转换。每个都通过SQL适配器来提供,然后将其放入数据表中。该系列的频率可能不同,日期可能不会重叠(即有时股票价格为每日,出口价格为每月,或GDP季度)。出口数量可能会在每个月的第一天出现,而如果该日期是周末,则该日期的股票价格可能会缺失。我怀疑这部分对我的问题很重要。

尽管如此,我还是仔细检查了这一步,一切都按预期进行了(所有值都在正确的日期正确输入了)。

要将这些系列添加到图表中,请像这样合并两个数据表(我相信这是我的问题所在):

myTable = myTables1.Copy();
myTables1.PrimaryKey = new DataColumn[] { myTables1.Columns["dates"] };

myTables2.PrimaryKey = new DataColumn[] { myTables2.Columns["dates"] };

myTable.Merge(myTables2, true); 

Datagridview of the Merged data table here looks good to me

然后创建图表:我在这里尝试了两种不同的方法。第一种是在两步循环中创建每个系列(每个系列一个),并循环遍历表中的每一行,并为每个系列添加x和y值。我还尝试将图表的数据源设置为表格,并创建2系列并将X和Y成员设置为表格中列的名称。

像这样:

mychart.DataSource = myTable;

然后在每个系列的循环中:

mychart.Series.Add(seriesname);
mychart.Series[seriesname].XValueMember = "dates";
mychart.Series[seriesname].YValueMembers = seriesname;

无论如何,我的第二个系列总是有些失误。要么是直线穿过,要么是缺少某些值(通过添加工具提示,我可以知道发生问题的日期可能是一个系列可能有值而另一个系列没有这个值)。

enter image description here

我不是在寻求语法方面的帮助(只是想法)。所以我的问题是:是否有一种标准或首选的方式来获取和绘制具有不同频率(或可能具有不同x值)的序列?另外,是否有很好的资料/文档可以让我阅读?我要补充一点,我有一个使用Visual Basic的类似程序,该程序使用一个SQL查询,而不管有多少个序列。这可以按照我期望的那样在图表上显示,但是鉴于最终表中null或空值的随机性,它会使转换变得更加复杂。

0 个答案:

没有答案