Возникли проблемы с отображением полярных данных на оси X DateTime - PullRequest
1 голос
/ 20 марта 2012

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

Вотнекоторый код того, как я его настраиваю.

List<DateTime> xValues = new List<DateTime>();
List<double> yValues = new List<double>();

DateTime now = new DateTime(2012, 3, 20, 11, 24, 24);
DateTime then = now.AddHours(2.0);

var iterDate = now;
var i = 0;

while (iterDate <= then)
{
    xValues.Add(iterDate);
    yValues.Add(i);

    iterDate = iterDate.AddSeconds(1.0);
    i++;
}

chart1.Series[0].ChartType = SeriesChartType.Polar;
chart1.Series[0].Points.DataBindXY(xValues, yValues);
chart1.Series[0].XValueType = ChartValueType.DateTime;
chart1.Series[0].IsXValueIndexed = true;

chart1.ChartAreas[0].AxisX.Minimum = now.ToOADate();
chart1.ChartAreas[0].AxisX.Maximum = then.ToOADate();

chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
chart1.Series[0]["PolarDrawingStyle"] = "Line";
// setup the X grid
chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = true;
chart1.ChartAreas[0].AxisX.MajorGrid.IntervalType = DateTimeIntervalType.Minutes;
chart1.ChartAreas[0].AxisX.MajorGrid.Interval = 1;
chart1.ChartAreas[0].AxisX.Crossing = 0;
// setupthe Y grid
chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = true;
chart1.ChartAreas[0].Area3DStyle.Enable3D = false;

И это выглядит так: chart

2 основных вопроса:

  1. Почемуон зазубренный?
  2. Почему он начинается и заканчивается вокруг маркера сетки 12:44:24, если я установил пересечение 0?

Обновление:

Если я изменю строку:

DateTime now = new DateTime(2012, 3, 20, 11, 24, 24);

на

DateTime now = new DateTime();

, график будет отображаться по желанию: intended chart

Я не понимаю этого резкого измененияна основании даты начала.

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Когда вы устанавливаете дату начала для нового DateTime (), его эквивалент OADate равен 0. (Таким образом, вы устанавливаете минимум XAxis равным 0) Свойства минимума и максимума оси X используются для указания другого углового масштаба (если вы не используете 0-360).Если вы помещаете данные в XAxis, ваши данные должны иметь смысл использовать Chartcontrol для рисования полярных графиков.Я не уверен, каковы ваши намерения, но вы должны правильно нормализовать данные, если хотите отобразить их на полярном графике.


Они начинаются в 11:24:24, а не в 12:44:24.Вам нужно изменить дату начала и окончания вашей оси, если вы хотите нарисовать 24 часа на полярных графиках.

var fromDate = new DateTime(DateTime.Now.Year,
         DateTime.Now.Month,
         DateTime.Now.Day,
         0,
         0,
         0);

var toDate = new DateTime(DateTime.Now.Year,
      DateTime.Now.Month,
      DateTime.Now.Day,
      23,
      59,
      59);

chart1.ChartAreas[0].AxisX.Minimum = fromDate.ToOADate();
chart1.ChartAreas[0].AxisX.Maximum = toDate.ToOADate();

Также используйте подсказки, чтобы понять построенные данные на графике

chart1.Series[0].ToolTip = "#VALX{hh:mm tt} --- #VALY";
1 голос
/ 22 марта 2012

Разместил это на форумах MSDN здесь и получил приемлемый ответ.

Что-то не так с органами управления, по-видимому. Поэтому вам не нужно использовать DateTime в качестве типа значения X и устанавливать метки вручную.

...