0

同じ X 軸の値を共有する 2 つの系列を持つグラフがあります。Y 値を減算して、新しいシリーズを作成したいと考えています。

これまでに試した方法は 2 つあります。

  1. チャート上のポイントを変換し、それらを配列に入れて減算します。

       double[] arrayX = new double[chart2.Series[0].Points.Count()];
       double[] arrayY = new double[chart2.Series[0].Points.Count()];
       double[] arrayResult = { };
    
        for (int i = 0; i < chart2.Series[0].Points.Count(); i++)
        {               
            arrayX[i] = chart2.Series[0].Points[i].XValue;
            arrayY[i] = chart2.Series[0].Points[i].YValues[0];
        }
    

これに関する問題は、これが最初のシリーズからのみ X 値を取得し、2 番目のシリーズの X 値を除外することです。

  1. ポイントをチャートに追加するとき、これを使用しました:

    chart2.Series[SplitListBox.Items[0].ToString()].Points.AddXY(e, firstval);  
    chart2.Series[SplitListBox.Items[1].ToString()].Points.AddXY(e, firstval);  
    

どちらも別々のループにあります。各ループのポイント (e,firstval) をキャッチするために 2 つの配列を使用するつもりでしたが、2 つを互いに減算し、1 つのシリーズに存在する値を保持し、他のシリーズには存在しない値を保持する方法がわかりません。

4

1 に答える 1

1

Series SDelta好みに合わせて新しいものを作成した後、次のように単純な関数を呼び出してそれを埋めることができます:

void PlotDelta(Chart chart, Series S1, Series S2, Series SDelta)
{
    for (int i = 0; i < S1.Points.Count; i++)
    {
        if ( i < S2.Points.Count)
        {
            DataPoint dp1 = S1.Points[i];
            DataPoint dp2 = S2.Points[i];
            if (!dp1.IsEmpty && !dp2.IsEmpty)
                SDelta.Points.AddXY(dp1.XValue, dp2.YValues[0] - dp1.YValues[0]);
        }
    }

異なるポイント数または空のポイントの場合のエラー処理を改善することができます..

ここにテストベッドがあります:

    private void button1_Click(object sender, EventArgs e)
    {
        chart1.Series.Clear();
        chart1.Series.Add(new Series { Name = "Cos", ChartType = SeriesChartType.Line });
        chart1.Series.Add(new Series { Name = "Sin", ChartType = SeriesChartType.Line });
        chart1.Series.Add(new Series { Name = "Delta", ChartType = SeriesChartType.Line });

        for (int i = 0; i < 100; i++ )
        {
            chart1.Series["Cos"].Points.AddXY(i, Math.Cos(i / Math.PI));
            chart1.Series["Sin"].Points.AddXY(i, Math.Sin(i / Math.PI));
        }

        PlotDelta(chart1, chart1.Series["Cos"], chart1.Series["Sin"],
                          chart1.Series["Delta"]);
    }

ここに画像の説明を入力

もちろん、デルタ シリーズの作成を関数に統合することもできます。ただし、Color、ChartType など、変更したいプロパティを渡す必要があります。

于 2016-03-16T08:19:39.603 に答える