我试图在我的Windows应用程序中每隔一秒绘制一个带有实时数据的折线图。为此,我需要为图表设置最小值(0秒)和最大值(10分钟)。 10分钟后,最小值为10分钟,最大值为20分钟。所以我每次都要显示10分钟的数据。我需要从一开始就用滚动条显示以前的数据。
我尝试了以下代码,但我能够适应图表的前两帧。这意味着例如0-10分钟和10-20分钟。之后我无法拟合最小值和最大值(在调试时,获取正确的值,但图表未使用最近的最大最大值更新)。我不明白哪里我做错了。我是MS图表控件的新手。请指导我。
int i1=0,i2=120,count=0;
double min,max;
private void timer1_Tick(object sender, EventArgs e)
{
chart1.Invoke(addDataDel);
count++;
}
public void AddData()
{
xvalue = getX(count);
yvalue = getY(count + 1);
foreach (Series ptSeries in chart1.Series)
{
AddNewPoint(timeStamp, ptSeries,xvalue,yvalue);
}
}
public void AddNewPoint(DateTime timeStamp, System.Windows.Forms.DataVisualization.Charting.Series ptSeries, double xvalue, double yvalue)
{
// Add new data point to its series.
ptSeries.Points.AddXY(timeStamp.ToOADate(), xvalue);
ptSeries.Points.AddXY(timeStamp.ToOADate(), yvalue);
if ((count% 600)==0)
{
double removeBefore = timeStamp.AddSeconds((double)(600) * (-1)).ToOADate();
if (ptSeries.Points[0].XValue < removeBefore)
{
i2 += 120;
i1 += 120;
chart1.ChartAreas[0].CursorX.AutoScroll = true;
chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
chart1.ChartAreas[0].AxisX.ScaleView.Size = 120;
min = ptSeries.Points[0].XValue;
chart1.ChartAreas[0].AxisX.Minimum = ptSeries.Points[0].XValue;
chart1.ChartAreas[0].AxisX.Maximum = DateTime.FromOADate(ptSeries.Points[0].XValue).AddMinutes(2).ToOADate();
//chart1.ChartAreas[0].AxisX.ScaleView.Zoom(chart1.ChartAreas[0].AxisX.Minimum, chart1.ChartAreas[0].AxisX.Maximum);
min = chart1.ChartAreas[0].AxisX.Minimum;
max = chart1.ChartAreas[0].AxisX.Maximum;
}
}
if (count >= 600)
{
if ((count >= i1) || (count <= i2))
{
chart1.ChartAreas[0].AxisX.LabelStyle.Enabled = true;
chart1.ChartAreas[0].AxisX.ScaleView.Zoom(min, max);
chart1.ChartAreas[0].AxisX.ScaleView.Position = max;
}
}
chart1.Update();
chart1.ChartAreas[0].RecalculateAxesScale();
}