C # chart - сложность построения временных рядов с разными частотами - PullRequest
0 голосов
/ 02 декабря 2018

Это мой первый пост здесь.Я пытаюсь создать «простую» программу для построения графиков (форма Windows основана на C #).Я говорю просто, потому что в настоящее время я играю только с максимум 2 сериями и несколькими преобразованиями (процентные изменения, фактические изменения, скользящие средние и скользящие суммы).Это будет сложнее, чем это, но сначала наличие ограниченной функциональности может помочь мне лучше понять, как все это работает в C #.

Я искал и выключал пару дней, но пока мне не повезло с моей конкретной ситуацией.Я постараюсь быть максимально подробным.Пользователь извлекает данные временных рядов из SQL Server.Эта часть программы ведет себя как ожидалось.Я создаю 2 запроса (по одному для каждой серии), чтобы получить данные отдельно.Я делаю преобразования в запросе SQL.Каждый приходит через адаптер SQL, который затем помещается в таблицу данных.Ряды могут иметь разную частоту, и даты могут не перекрываться (т.е. иногда цены на акции будут ежедневными, а экспорт будет ежемесячным или ВВП будет ежеквартальным).Число экспорта может указываться как первое число каждого месяца, в то время как цены на акции могут не иметь значения на эту дату, если это были выходные.Я подозреваю, что эта часть важна для моей проблемы.

Тем не менее, я дважды проверил этот шаг, и все работает, как и ожидалось (все значения поступают правильно в нужные даты).

Чтобы добавить эти серии в диаграмму, я объединяю две таблицы данных следующим образом (я полагаю, отсюда и мои проблемы):

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

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

myTable.Merge(myTables2, true); 

Представление данных из таблицыТаблица объединенных данных здесь выглядит хорошо для меня

Затем я создаю диаграмму: я попробовал два разных метода здесь.Первый - создать каждую серию в двухэтапном цикле (по одному для каждой серии), пройти по каждой строке таблицы и добавить значения x и y для каждой серии.Я также попытался установить источник данных для диаграммы как таблицу, создать две серии и установить элементы 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-запрос, независимо от количества серий.Это работает с точки зрения графика, который выглядит так, как я ожидал, но он значительно усложняет преобразования, учитывая случайность нулевых или пустых значений в финальной таблице.

...