I have this code:
private void timer_Tick(object sender, EventArgs e)
{
timer.Stop();
for (int i = 0; i < TOTAL_SENSORS; i++)
{
DateTime d = DateTime.Now;
devices[i].Value = float.Parse(serialPort.ReadLine());
if (chart1.Series[i].Points.Count > MAX_POINTS)
{
//see the most recent points
}
chart1.Series[i].Points.AddXY(d, devices[i].Value);
}
timer.Start();
}
This part of my code is the timer's tick event where i draw a chart and i need to update it every tick.I keep adding points and when the points count reaches MAX_POINTS(10) it removes the first point and adds a new one at the end.
The problem is when it reaches MAX_POINTS it starts removing points at the end and the graph doesn't autoscroll. All points get deleted and no new points get added.
Please help me and say what I need to change the chart to work as I said.
EDIT 1: I am using Windows Forms.
EDIT 2: AddXY and RemoveAt are not mine they are from the points collection.
EDIT 3: I also want to know how to have a 'scope' and see the data for the last hour or for the last week or for the last month.
EDIT 4: I changed my question a bit, I now want to scale the chart to show the points from the last hour/day
You need to put this:
to adjust X and Y axis scale
Store the points in a separate dictionary as well as the chart. Then you can just query the dictionary when you want the most recent points.
then add this line directly after your call to
AddXY()
:and if you want to keep the dictionary in sync with the chart, remove the first element from the dictionary as well:
To query the dictionary, you can use linq: Take() Documentation Skip() Documentation
or you can get a specific point (lets say you want the point from one minute ago)
or you can loop over the items: