如何治疗C#winforms摇摆图?
我在C#WPF应用程序中实现了一些实时图表,但我使用的是WinForms图表,因为它们通常易于使用,而且性能惊人 不管怎样,我的图表运行得很好,除了一个我一生都无法解决的主要问题: 当我向图表中添加数据时,它有时只是调整自身大小。有时,它经常这样做,使自己摇摆不定,使图表非常讨厌阅读和处理 我的问题是:我该如何防止这个该死的图表不断调整自身大小 一些补充资料: 该图表包含在我的XAML中,如下所示:如何治疗C#winforms摇摆图?,c#,wpf,winforms,xaml,charts,C#,Wpf,Winforms,Xaml,Charts,我在C#WPF应用程序中实现了一些实时图表,但我使用的是WinForms图表,因为它们通常易于使用,而且性能惊人 不管怎样,我的图表运行得很好,除了一个我一生都无法解决的主要问题: 当我向图表中添加数据时,它有时只是调整自身大小。有时,它经常这样做,使自己摇摆不定,使图表非常讨厌阅读和处理 我的问题是:我该如何防止这个该死的图表不断调整自身大小 一些补充资料: 该图表包含在我的XAML中,如下所示: <WindowsFormsHost Grid.Row="1" Grid.ColumnSp
<WindowsFormsHost Grid.Row="1" Grid.ColumnSpan="2" Margin="5">
<winformchart:Chart Dock="Fill" x:Name="Session0Chart">
<winformchart:Chart.ChartAreas>
<winformchart:ChartArea/>
</winformchart:Chart.ChartAreas>
</winformchart:Chart>
</WindowsFormsHost>
通过以下方式添加数据点:
//如果我们得到的分数太多,请移除头部
if(session.Chart.Series[0].Points.Count>=Properties.Settings.Default.ECGDataPoints)
{
session.Chart.Series[0].Points.RemoveAt(0);
}
//加分
对于(int i=data.samples.Length-1;i>=0;i--)
{
session.Chart.Series[0].Points.AddXY(session.ecgT,data.samples[i]);
session.ecgT+=session.ECGPeriod/(double)data.samples.Length;
}
//只看最后几秒钟
session.Chart.ChartAreas[0]。axix.max=session.ecgT;
session.Chart.ChartAreas[0].axix.Minimum=session.ecgT-Properties.Settings.Default.ECGTimeWindow;
您能提供的任何帮助都将非常感谢,这已经让我发疯太久了
chart.ChartAreas[0].InnerPlotPosition.X = 50;
chart.ChartAreas[0].InnerPlotPosition.Y = 5;
chart.ChartAreas[0].InnerPlotPosition.Width = 80;
chart.ChartAreas[0].InnerPlotPosition.Height = 80;
阅读。您可以设置ChartArea
位置
和内部绘图位置
以避免这些摆动
chrt.ChartAreas[0].Position.Auto = false;
chrt.ChartAreas[0].Position.Height = 70;
chrt.ChartAreas[0].Position.Y = 5;
chrt.ChartAreas[0].InnerPlotPosition.Auto = false;
chrt.ChartAreas[0].InnerPlotPosition.Height = 50;
chrt.ChartAreas[0].InnerPlotPosition.Y = 10;
您应该将X轴设置为
日期时间
,而不是双倍
。反正是心电图。。。。
晃动是通过使用值(如0.100000001234)增加X轴引起的
// No wiggle
chartNoWiggle.Series[0].Points.AddXY(xdatetime, r.NextDouble());
if (chartNoWiggle.Series[0].Points.Count > 10)
chartNoWiggle.Series[0].Points.RemoveAt(0);
chartNoWiggle.ChartAreas[0].AxisX.Minimum = chartNoWiggle.Series[0].Points[0].XValue;
chartNoWiggle.ChartAreas[0].AxisX.Maximum = xdatetime.ToOADate();
xdatetime = xdatetime.AddMinutes(1);
// Wiggle
chartWiggle.Series[0].Points.AddXY(xdouble, r.NextDouble());
if (chartWiggle.Series[0].Points.Count > 10)
chartWiggle.Series[0].Points.RemoveAt(0);
chartWiggle.ChartAreas[0].AxisX.Minimum = chartWiggle.Series[0].Points[0].XValue;
chartWiggle.ChartAreas[0].AxisX.Maximum = xdouble;
xdouble += 0.10000000001234;