2017-05-31 10 views
0

複数の選択肢をチャートエリアで数えたいと思っています。例として、複数の選択肢をこの画像としてマークすることができます。Multiple selected chart。このチャートでは、複数の選択肢の数をどのように数えますか。グラフ領域の複数選択の数はどのように数えますか?

私の複数の選択コードは次のとおりです。

 SizeF rangeOfCurve = SizeF.Empty; 
     List<SizeF> ranges = new List<SizeF>(); 
     List<int> selectedIndices = new List<int>(); 

     private void chart1_SelectionRangeChanged(object sender, CursorEventArgs e) 
      { 

       ranges.Add(rangeOfCurve); 
       selectedIndices.Union(collectDataPoints(chart1.Series[0],rangeOfCurve.Width, rangeOfCurve.Height)).Distinct(); 

       StripLine sl = new StripLine(); 
       sl.BackColor = Color.FromArgb(255, Color.LightSeaGreen); 
       sl.IntervalOffset = Math.Min(rangeOfCurve.Width, rangeOfCurve.Height); 
       sl.StripWidth = Math.Abs(rangeOfCurve.Height - rangeOfCurve.Width); 
       chart1.ChartAreas[0].AxisX.StripLines.Add(sl);   

      } 
      List<int> collectDataPoints(Series s, double min, double max) 
      { 
       List<int> hits = new List<int>(); 
       for (int i = 0; i < s.Points.Count; i++) 
        if (s.Points[i].XValue >= min && s.Points[i].XValue <= max) hits.Add(i);   
       return hits; 
      } 

     private void chart1_SelectionRangeChanging(object sender, CursorEventArgs e) 
      { 

       rangeOfCurve = new SizeF((float)e.NewSelectionStart, (float)e.NewSelectionEnd); 
      } 

これは、私は、ボタンのクリックイベントを追加ここに新しい.CSV file.Inにデータを選択したものは、私は、私は複数選択を追加することができます言いたいfile.but別の.csvをエクスポートするエリアデータを選択し、輸出のための私のコードですグラフ領域ではデータが最後に選択された部分のみにエクスポートされます。複数の選択データをすべて取得できます。これは、選択した1つの領域データを別の.csvファイルに取り込むためのコードです。

private void btnExport_Click(object sender, EventArgs e) 
{ 
    List<Graph> ObservingData = new List<Graph>(); // List to store all available Graph objects from the CSV 
    int index = 0; 
    using (StreamWriter sw = new StreamWriter(@"D:\CSVFile\NEWFile\Export\NewFile.csv")) 
    { 
     // Loops through each lines in the CSV 
     foreach (string line in System.IO.File.ReadAllLines(pathToCsv)) 
     { 
      // here line stands for each line in the csv file 
      string[] CsvLine = line.Split(','); 

      // creating an object of type Graph based on the each csv line 
      // and adding them to the List<Graph> 
      Graph Instance1 = new Graph(); 

      if (index == 0) 
      { 
       sw.WriteLine(line); 
      }  
      else 
      { 
       //Add the code here..** 
        if (((chart1.ChartAreas[0].CursorX.SelectionStart))<=index && (index<= (chart1.ChartAreas[0].CursorX.SelectionEnd))) 
       { 
        sw.WriteLine(line); 
       }      
      } 
      index++; 
     } 
     sw.Close(); 
    } 
    MessageBox.Show("Data are copied to the new .CSV file"); 
} 

あなたはあなたにそんなに感謝this.I午前を解決するために、任意の助けを与えることができます。ここでは、あなたが選択をマークするStripLinesを追加したと仮定すると、

+0

あなたはストリップラインのコレクションを列挙し、それぞれの特性を試験することができます。ストリップライン(実際には「選択肢」ではない)やデータポイントについての情報が必要ですか? – TaW

+0

@ TaW.私はこの言語のための初心者です。私はこの問題を解決するために私に助けを与えてください。私はチャートに複数の選択肢を表示したいと私は持っていた。CSVファイルでその複数の選択データポイントを取得したい複数の選択されたすべての領域の境界をカウントしたい。 'chart1.ChartAreas [0] .CursorX.SelectionStart'と 'chart1.ChartAreas [0] .CursorX.SelectionEnd'を使用して1つの選択されたデータ領域を取得できますが、選択した地域を1つずつ選択してください。そのために私に何か助けてください。 – SNP

+0

軸には1つのカーソルしかないので、このように作成できる選択肢は1つだけです。ストリップラインは選択を作成する最も簡単な方法でもありません。 - マウスイベントのみを使用して複数の選択肢を作成する例については、リンクを参照してください。ご質問がある場合はお気軽にお問い合わせください。 – TaW

答えて

0

は、あなたがこれらのStripLinesからDataPointsを収集することができる方法の例です。

のがポイントリストのList<>を作成してみましょう:

selectionPoints = new List<List<DataPoint>>(); 

今、私達ができます

List<List<DataPoint>> GetSelectedPoints(ChartArea ca, Series S) 
{ 
    selectionPoints = new List<List<DataPoint>>(); 

    foreach (var sl in ca.AxisX.StripLines) 
    { 
     List<DataPoint> points = new List<DataPoint>(); 
     points = S.Points.Select(x => x) 
        .Where(x => x.XValue >= sl.IntervalOffset 
          && x.XValue <= (sl.IntervalOffset + sl.StripWidth)).ToList(); 

     selectionPoints.Add(points); 
    } 
    return selectionPoints; 
} 

ここでは、次のようにDataPointsを収集します。

foreach (var pointList in selectionPoints) 
{ 
    foreach (var dp in pointList) dp.Color = Color.Red; 
} 

を...またはそれらをエクスポート:N。..色彼らのようDataPointsで物事を行う

string filePath = "D:\\demo.csv"; 
StringBuilder sb = new StringBuilder(); 
foreach (var pointList in selectionPoints) 
{ 
    foreach (var dp in pointList) 
     sb.Append(dp.XValue + "," + dp.YValues[0] + ";"); // pick your format! 
} 
File.WriteAllText(filePath, sb.ToString()); 
関連する問題