我正试图在沙盒应用程序中进行一些非常简单的极坐标绘图,并得到一些非常奇怪的结果。基本上,我正在尝试重新创建这个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;
它显示为:
2个主要问题:
如果我改变了行:
DateTime now = new DateTime(2012, 3, 20, 11, 24, 24);
到
DateTime now = new DateTime();
图表显示了所需:
根据开始日期我不明白这种变化。
答案 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值类型并手动设置标签。