我是WinForms的新手,并希望在学习如何绘制数据点方面寻求帮助。
我有一个图,并使用以下代码对其进行了初始化:
public Form1()
{
InitializeComponent();
var _chartArea = chrtAdamHistory.ChartAreas[0];
var _chartSeries = chrtAdamHistory.Series[0];
var _currDateTime = DateTime.Now;
//Set X Axis Properties
_chartArea.AxisX.LabelStyle.Format = "HH:mm";
_chartArea.AxisX.IntervalType = DateTimeIntervalType.Minutes;
_chartArea.AxisX.Interval = 30;
_chartArea.AxisX.Minimum =
new DateTime(_currDateTime.Year, _currDateTime.Month, _currDateTime.Day, 0, 0, 0).ToOADate();
_chartArea.AxisX.Maximum =
new DateTime(_currDateTime.Year, _currDateTime.Month, _currDateTime.Day, _currDateTime.Hour,
_currDateTime.Minute, _currDateTime.Second).ToOADate();
//Set Y Axis Properties
_chartArea.AxisY.Minimum = 0;
_chartArea.AxisY.Maximum = 500;
_chartArea.AxisY.Interval = 50;
//Set Series Properties
_chartSeries.ChartType = SeriesChartType.Spline;
_chartSeries.XValueType = ChartValueType.Time;
_chartSeries.YValueType = ChartValueType.Int32;
}
图表将如下所示:
现在这就是我遇到的问题。我不知道当X Axis
是Time
时如何添加数据点。有人可以告诉我如何或将我指向正确的方向吗?
答案 0 :(得分:1)
默认情况下,Chart
中的所有属性都设置为Auto
,这使工作变得更轻松。但是要获得完全控制,必须将其中一些设置为实际需要的值。
您对轴的Minimun
和Maximum
值进行了此操作,正如人们所看到的那样,它可以正常工作。但是后果之一是,现在您的数据必须落入您要显示的范围。
这对于数字很简单,因为Chart
中的所有值在内部都是double
。但是,在使用Date
,DateTime
等工具时,事情可能会变得棘手。
虽然可以直接添加DateTime
值,但它们仍将在内部转换为double
。您已选择通过double
函数转换DateTime
值,将它们实际添加为ToOADate
。但是您还告诉图表,x值为Time
。这是令人困惑的,因为C#中没有Time
类型。 (而不仅仅是我们,更重要的是Chart
控件会引起混乱;-)
要立即添加DataPoints
,您需要执行以下任一操作:
下面是添加一些数据点的示例。
chrtAdamHistory.Series[0].Points.AddXY(timeValue.AddHours(-2).ToOADate(), intValue);
chrtAdamHistory.Series[0].Points.AddXY(timeValue.AddHours(-1).ToOADate(), intValue + 12);
chrtAdamHistory.Series[0].Points.AddXY(timeValue.ToOADate(), intValue + 17);
DateTime
的值,而无需进行ToOADate
转换,只要且仅当您告诉图表或者期望那些或在Auto
上工作。示例:
_chartSeries.XValueType = ChartValueType.Auto; // either that or..
_chartSeries.XValueType = ChartValueType.DateTime; // ..that will work
要了解DateTime
值的内部范围,请仔细研究一下DateTime.Now.ToOADate()
btw产生的较大倍数; atm是:43291.412605081
。
答案 1 :(得分:0)
您尝试过这样的事情吗?
DateTime timeValue = DateTime.Now; // for example
Int32 intValue = 324;
chrtAdamHistory.Series[0].Points.AddXY(timeValue, int32value);
答案 2 :(得分:-1)
您必须设置值。
您实际尝试了什么?也许错过了无效?
for (int i=0; i < 1440; i++)
{
_chartSeries.Points.AddXY(i, f(i));
}
chrtAdamHistory.Invalidate();