2015-06-15 2 views
0

Я пытаюсь читать данные из двух последовательных портов и строить график каждой кривой с течением времени на одном графике. Однако, когда я это делаю, он соединяет кривые. Как сохранить два набора данных отдельно, но на одном графике? Однако я видел множество решений, использующих masterPane, когда я пытаюсь их использовать, моя программа говорит, что в zedgraph нет матерпана.Несколько кривых на одном графике zedgraph

Вот соответствующий код:

GraphPane myPane2; 
PointPairList Oz1time = new PointPairList(); 

myPane2 = zedGraphControl2.GraphPane; 
myPane2.Title = "Data vs Time Plots"; 
myPane2.XAxis.Title = "Elapsed Minutes"; 
myPane2.YAxis.Title = "Ozone Data"; 

     private void UpdateData3(string line) 
    { 
     if (this.InvokeRequired) 
     { 
      this.BeginInvoke(new UpdateDataDelegate(UpdateData3), new object[] { line }); 
     } 
     else 
     { 
      if (chk_DISPLAY_3.Checked == true) 
      { 
       timer3.Interval = (30000); 
       timer3.Start(); 
       OZ1lastdatatime = DateTime.Now; 
       count++; 
       if (count > 7) 
       { 
        count = 0; 
        TextBox_3.Text = ""; 
        TextBox_3.AppendText(line); 
       } 
       else 
       { 
        TextBox_3.AppendText(line); 
       } 
      } 
      if (chk_SAVE_FILE_3.Checked == true) 
      { 
       StoreData3.Write(line); 
       StoreData3.Flush(); 
      } 
      if (chk_PLOT_1.Checked == true) 
      { 
       string[] blahArray = line.Split(new char[] { ',' }); 
       //string blaharray = Convert.ToDouble(blahArray[2]).ToString("F4"); 
       int column_data = Convert.ToInt32(textBox3.Text); 
       double oz1 = Convert.ToDouble(blahArray[column_data]); 
       //TextBox_3.Text = Convert.ToString(oz1); 
       TimeSpan span = DateTime.UtcNow - startDateTimeOfProgram; 
       double elapsedMinutes = span.TotalMinutes; 

       Oz1time.Add(elapsedMinutes,oz1); 
       zedGraphControl2.AxisChange(); 
       zedGraphControl2.GraphPane.AddCurve("", Oz1time , Color.Blue); 
       zedGraphControl2.Refresh(); 



      } 
     } 
    } 

    private void UpdateData4(string line) 
    { 
     if (this.InvokeRequired) 
     { 
      this.BeginInvoke(new UpdateDataDelegate(UpdateData4), new object[] { line }); 
     } 
     else 
     { 
      Console.WriteLine(line); 
      if (chk_DISPLAY_4.Checked == true) 
      { 
       timer4.Interval = (30000); 
       timer4.Start(); 
       OZ2lastdatatime = DateTime.Now; 
       count++; 
       if (count > 7) 
       { 
        count = 0; 
        TextBox_4.Text = ""; 
        TextBox_4.AppendText(line); 
       } 
       else 
       { 
        TextBox_4.AppendText(line); 
       } 
      } 
      if (chk_SAVE_FILE_4.Checked == true) 
      { 
       StoreData4.Write(line); 
       StoreData4.Flush(); 
      } 
      if (chk_PLOT_2.Checked == true) 
      { 
       string[] blahArray = line.Split(new char[] { ',' }); 
       //string blaharray = Convert.ToDouble(blahArray[2]).ToString("F4"); 
       int column_data = Convert.ToInt32(textBox4.Text); 
       double oz2 = Convert.ToDouble(blahArray[column_data]); 
       //TextBox_3.Text = Convert.ToString(oz1); 
       TimeSpan span = DateTime.UtcNow - startDateTimeOfProgram; 
       double elapsedMinutes = span.TotalMinutes; 

       Oz1time.Add(elapsedMinutes, oz2); 
       zedGraphControl2.AxisChange(); 
       zedGraphControl2.GraphPane.AddCurve("", Oz1time, Color.Green); 
       zedGraphControl2.Refresh(); 
      } 
     } 
    } 

ответ

0

Основная проблема, как представляется, что вы используете тот же PointPairList, Oz1time, чтобы создать обе кривые. Вместо этого попробуйте создать два отдельных файла PointPairList s, по одному для каждой кривой.

Некоторые соответствующие биты кода:

PointPairList Oz2time = new PointPairList(); 
... 
Oz2time.Add(elapsedMinutes, oz2); 
... 
zedGraphControl2.GraphPane.AddCurve("", Oz2time, Color.Green); 
+0

Спасибо! Почему C# не распознает команду masterpane? Я также пытаюсь это OZ1time.IsY2Axis = true; для добавления другой оси y, однако C# говорит, что IsY2Axis не существует – manateejoe

+0

Я ничего не знаю о «masterpane». Что касается оси Y, вам сначала нужно создать ее, например: 'int idx = zedGraphControl2.GraphPane.AddY2Axis (" Other Stuff ")'; – adv12

+0

Спасибо за помощь, почему-то визуальная студия не распознает команды: IsY2Axis или AddY2Axis – manateejoe

Смежные вопросы