当第一个点位于(0,0)时,使用c# Chart API自动增加x轴值
本文关键字:API Chart 轴值 增加 第一个 使用 | 更新日期: 2023-09-27 18:01:18
我第一次尝试使用c#制图API,并且遇到了一些问题。我有两个硬件信号,我想把它们画在一个图上,x轴从-10到10 y轴也从-10到10。我使用的是SeriesChartType。点图表类型,在所有情况下,除了一个情况下的代码工作方式,我期望。我正在使用AddXY函数向图表添加点。实际上,这些值来自硬件,但在本例中,我只是硬编码了这些值。
我遇到的问题是,如果要绘制的第一个点的x轴值为0,则图表似乎忽略了0,并简单地为绘制的每个后续点增加x轴值1。
我创建了下面的简化示例来演示我的问题。我硬编码x轴值为0 y轴值为2。当它绘制点时,第一个点绘制在(1,2)处,下一个点绘制在(2,2)处,然后是(3,2),(4,2),最后是(5,2)。
我应该注意到,只有当第一个要绘制的点的x轴值为0时才会发生这种情况,如果它有任何其他值,图表将永远正常运行。我不知道是什么原因造成的。
请参阅以下示例代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ConfigureChartSettings();
AddFakeData();
}
private void AddFakeData()
{
this.chart1.Series["Series1"].Points.AddXY(0, 2); //Gets plotted at (1,2)
this.chart1.Series["Series1"].Points.AddXY(0, 2); //Gets plotted at (2,2)
this.chart1.Series["Series1"].Points.AddXY(0, 2); //Gets plotted at (3,2)
this.chart1.Series["Series1"].Points.AddXY(0, 2); //Gets plotted at (4,2)
this.chart1.Series["Series1"].Points.AddXY(0, 2); //Gets plotted at (5,2)
}
private void ConfigureChartSettings()
{
//Set point chart type
this.chart1.Series["Series1"].ChartType = SeriesChartType.Point;
//Set the market size
this.chart1.Series["Series1"].MarkerSize = 5;
//Set the marker shape to a circle
this.chart1.Series["Series1"].MarkerStyle = MarkerStyle.Circle;
//X and Y values are both between -10 and 10 so set the x and y axes accordingly
this.chart1.ChartAreas["ChartArea1"].AxisX.Minimum = -10.0;
this.chart1.ChartAreas["ChartArea1"].AxisX.Maximum = 10.0;
this.chart1.ChartAreas["ChartArea1"].AxisY.Minimum = -10.0;
this.chart1.ChartAreas["ChartArea1"].AxisY.Maximum = 10.0;
//Set the titles of the X and Y axes
this.chart1.ChartAreas["ChartArea1"].AxisX.Title = "XSignalName";
this.chart1.ChartAreas["ChartArea1"].AxisY.Title = "YSignalName";
//Set the Intervals of the X and Y axes,
this.chart1.ChartAreas["ChartArea1"].AxisX.Interval = 5;
this.chart1.ChartAreas["ChartArea1"].AxisY.Interval = 5;
//Set the MajorGrid interval to 5.
this.chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Interval = 5;
this.chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.Interval = 5;
//Set the MinorGrid interval to 1.
this.chart1.ChartAreas["ChartArea1"].AxisX.MinorGrid.Interval = 1;
this.chart1.ChartAreas["ChartArea1"].AxisY.MinorGrid.Interval = 1;
//Set the MinorGrid style to Dot so that it is less obstructive.
this.chart1.ChartAreas["ChartArea1"].AxisX.MinorGrid.LineDashStyle = ChartDashStyle.Dot;
this.chart1.ChartAreas["ChartArea1"].AxisY.MinorGrid.LineDashStyle = ChartDashStyle.Dot;
//Enable the minor grids.
this.chart1.ChartAreas["ChartArea1"].AxisX.MinorGrid.Enabled = true;
this.chart1.ChartAreas["ChartArea1"].AxisY.MinorGrid.Enabled = true;
}
}
我已经浪费了很多时间试图弄清楚为什么会发生这种情况,我确信这是非常简单的事情,但我似乎找不到答案。
在这种情况下,MsChart试图提供太多帮助。它检测到您已经插入了具有相同X == 0
的数据点,因此自动切换到使用点索引作为X值。注意,它只在X = 0时发生。
您可以通过使用X != 0
添加额外的空点来修复它。因此,在数据条目的开头添加这个将得到您想要的绘图。
// insert an empty point with X != 0
this.chart1.Series["Series1"].Points.AddXY(10, 10);
this.chart1.Series["Series1"].Points[0].IsEmpty = true;
// add your points as normal
this.chart1.Series["Series1"].Points.AddXY(0, 2);
this.chart1.Series["Series1"].Points.AddXY(0, 2);
this.chart1.Series["Series1"].Points.AddXY(0, 2);
this.chart1.Series["Series1"].Points.AddXY(0, 2);
this.chart1.Series["Series1"].Points.AddXY(0, 2);