在DateTime X轴上绘制极坐标数据时遇到问题

时间:2012-03-20 16:27:08

标签: c# winforms mschart

我正试图在沙盒应用程序中进行一些非常简单的极坐标绘图,并得到一些非常奇怪的结果。基本上,我正在尝试重新创建这个question的答案(最终它变得有点复杂,但如果我能做到这一点,我应该在路上)。

以下是我如何设置它的一些代码。

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. 如果我将交叉点设置为0,为什么它会以12:44:24网格标记开始和结束?
  3. 更新

    如果我改变了行:

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

    DateTime now = new DateTime();
    

    图表显示了所需: intended chart

    根据开始日期我不明白这种变化。

2 个答案:

答案 0 :(得分:2)

当您将开始日期设置为新的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 :(得分:1)

在MSDN论坛here上发布此消息,并收到了可接受的答案。

控件显然出现了问题。因此,您不需要将DateTime用作X值类型并手动设置标签。