使用 oxyplot 的表单应用程序的实时数据图
Real time data graph for form application with oxyplot
我在表单应用程序中处理实时数据。我的数据将实时工作,它会随着示波器波而滑动。
我该怎么做?我只是在库文档中看到 Wpf 示例,但我必须使用表单应用程序。
我是 oxyplot 的菜鸟。如果我错了请见谅
如果您建议,我也可以使用另一个图形库。
提前致谢
我假设您正在使用 Visual Studio 创建 WinForms 应用程序。如果是这种情况,我会使用工具箱中数据下的图表工具,而不是 OxyPlot。当您拖动它时,默认名称将为 Chart1。它还将添加一个通用系列。以下函数将生成平滑曲线:
private void GenerateCurve()
{
chart1.ChartAreas[0].Position.Auto = true;
chart1.ChartAreas[0].AxisY.Title = "SIN()";
chart1.ChartAreas[0].AxisX.Title = "Degrees";
// Set graph limits
chart1.ChartAreas[0].AxisX.Minimum = 0;
chart1.ChartAreas[0].AxisX.Maximum = 200;
chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisX.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount;
chart1.ChartAreas[0].AxisX.Interval = 90;
chart1.ChartAreas[0].AxisX.MinorTickMark.Enabled = true;
chart1.ChartAreas[0].AxisX.MinorTickMark.Interval = 10;
chart1.ChartAreas[0].AxisY.Minimum = -1;
chart1.ChartAreas[0].AxisY.Maximum = 1;
chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisY.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount;
chart1.ChartAreas[0].AxisY.Interval = .1;
chart1.ChartAreas[0].AxisY.MinorTickMark.Enabled = true;
// Set spline instead of line
chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
// Generate points
for (int x = 0; x < 1000; x++)
{
double y = Math.Sin(x);
chart1.Series[0].Points.AddXY((double)x, Math.Sin(x));
if (chart1.Series[0].Points.Count > 100)
{
chart1.Series[0].Points.RemoveAt(0);
chart1.ChartAreas[0].AxisX.Minimum = chart1.Series[0].Points[0].XValue;
chart1.ChartAreas[0].AxisX.Maximum = x;
Application.DoEvents();
System.Threading.Thread.Sleep(100);
}
}
}
我在表单应用程序中处理实时数据。我的数据将实时工作,它会随着示波器波而滑动。
我该怎么做?我只是在库文档中看到 Wpf 示例,但我必须使用表单应用程序。
我是 oxyplot 的菜鸟。如果我错了请见谅
如果您建议,我也可以使用另一个图形库。
提前致谢
我假设您正在使用 Visual Studio 创建 WinForms 应用程序。如果是这种情况,我会使用工具箱中数据下的图表工具,而不是 OxyPlot。当您拖动它时,默认名称将为 Chart1。它还将添加一个通用系列。以下函数将生成平滑曲线:
private void GenerateCurve()
{
chart1.ChartAreas[0].Position.Auto = true;
chart1.ChartAreas[0].AxisY.Title = "SIN()";
chart1.ChartAreas[0].AxisX.Title = "Degrees";
// Set graph limits
chart1.ChartAreas[0].AxisX.Minimum = 0;
chart1.ChartAreas[0].AxisX.Maximum = 200;
chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisX.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount;
chart1.ChartAreas[0].AxisX.Interval = 90;
chart1.ChartAreas[0].AxisX.MinorTickMark.Enabled = true;
chart1.ChartAreas[0].AxisX.MinorTickMark.Interval = 10;
chart1.ChartAreas[0].AxisY.Minimum = -1;
chart1.ChartAreas[0].AxisY.Maximum = 1;
chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisY.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount;
chart1.ChartAreas[0].AxisY.Interval = .1;
chart1.ChartAreas[0].AxisY.MinorTickMark.Enabled = true;
// Set spline instead of line
chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
// Generate points
for (int x = 0; x < 1000; x++)
{
double y = Math.Sin(x);
chart1.Series[0].Points.AddXY((double)x, Math.Sin(x));
if (chart1.Series[0].Points.Count > 100)
{
chart1.Series[0].Points.RemoveAt(0);
chart1.ChartAreas[0].AxisX.Minimum = chart1.Series[0].Points[0].XValue;
chart1.ChartAreas[0].AxisX.Maximum = x;
Application.DoEvents();
System.Threading.Thread.Sleep(100);
}
}
}