I am trying to plot a line chart with real time data for every one second in my windows application. For that I need to set minimum (0 seconds) and maximum (10 minutes) values for the chart . After 10 minutes, minimum value is 10 minutes and maximum value is 20 minutes. So I have to display,10 minutes data every time. I need to display previous data with scrollbar from the very beginning. I tried the following code but I am unable to set the min and max value of chart.Please solve my problem.
series1.XValueType = ChartValueType.DateTime;
series1.IsXValueIndexed = true;
series1.YAxisType = AxisType.Primary;
series1.ChartType = SeriesChartType.Line;
this.chart1.Series.Add(series1);
series2.XValueType = ChartValueType.DateTime;
series2.IsXValueIndexed = true;
series2.YAxisType = AxisType.Secondary;
series2.ChartType = SeriesChartType.Line;
this.chart1.Series.Add(series2);
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
chart1.ChartAreas[0].CursorX.IntervalType = DateTimeIntervalType.Seconds;
chart1.ChartAreas[0].CursorX.AutoScroll = true;
chart1.ChartAreas[0].CursorY.AutoScroll = true;
chart1.ChartAreas[0].AxisX.ScrollBar.Size = 15;
chart1.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.All;
chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false;
chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;
chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
chart1.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
chart1.ChartAreas[0].AxisY2.ScaleView.Zoomable = true;
chart1.ChartAreas[0].CursorX.IsUserEnabled = true;
chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
DateTime minValue, maxValue;
minValue = DateTime.Now;
maxValue = minValue.AddSeconds(600);
chart1.ChartAreas[0].AxisX.Minimum = minValue.ToOADate();
chart1.ChartAreas[0].AxisX.Maximum = maxValue.ToOADate();
chart1.ChartAreas[0].AxisX.ScaleView.Zoom(chart1.ChartAreas[0].AxisX.Minimum, chart1.ChartAreas[0].AxisX.Maximum);
Finally I found solution for my problem with little bit modifications for the code.Thanks for your support.I implemented a line chart with two series and the chart has to display 1 minute data in every frame.
int viewcount=0,count=0,mviewcount=60;
public void AddData() // executing using thread
{
while (true)
{
if (flag) // making flag as true by calling timer for every 1sec
{
flag = false;
DateTime timeStamp = DateTime.Now;
double y1 = 0.0;
double y2= 0.0;
y1= gety1(count);
y2= gety2(count + 1);
AddNewPoint(timeStamp, chart1.Series[0], chart1.Series[1], oilvalue, tempvalue);
count++;
}
Thread.Sleep(1);
}
}
public void AddNewPoint(DateTime timeStamp, System.Windows.Forms.DataVisualization.Charting.Series ptSeries1, System.Windows.Forms.DataVisualization.Charting.Series ptSeries2, double y1, double y2)
{
if (this.chart1.InvokeRequired)
{
BeginInvoke((Action)(() =>
{
this.chart1.Series[0].Points.AddXY(timeStamp.ToOADate(), y1);
this.chart1.Series[1].Points.AddXY(timeStamp.ToOADate(), y2);
if ((count % 60) == 0)
{
mviewcount += 60;
viewcount += 60;
chart1.ChartAreas[0].AxisX.Minimum = DateTime.FromOADate(ptSeries1.Points[count - 1].XValue).ToOADate();
chart1.ChartAreas[0].AxisX.Maximum = DateTime.FromOADate(ptSeries1.Points[count - 1].XValue).AddMinutes(1).ToOADate();
min = chart1.ChartAreas[0].AxisX.Minimum;
max = chart1.ChartAreas[0].AxisX.Maximum;
}
if (count >= 60)
{
if ((count >= viewcount) || (count <= mviewcount))
{
chart1.Series[0].Points[0].AxisLabel = System.DateTime.FromOADate(chart1.Series[0].Points[count - 1].XValue).ToString();
chart1.ChartAreas[0].AxisX.ScaleView.Position = max;
}
}
chart1.Update();
chart1.ChartAreas[0].RecalculateAxesScale();
}));
}
}