初めて C# Charting API を使用しようとしていますが、いくつか問題があります。-10 から 10 までの x 軸と -10 から 10 までの y 軸を持つグラフにプロットする 2 つのハードウェア信号があります。これには SeriesChartType.Point チャート タイプを使用しています。 1 つのケースを除いて、コードは期待どおりに動作します。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;
}
}
なぜこれが起こるのかを理解しようとして、私はすでに多くの時間を無駄にしました.それは信じられないほど単純なことだと確信していますが、答えを見つけることができないようです. どんな助けでも大歓迎です。