2017-01-30 10 views
0

я следующий график в моей Windows Form:Время на оси абсцисс на графиках C#

enter image description here

Я установил ось X для отображения времени, как показано ниже:

enter image description here

Вот методы, которые я называю, чтобы нарисовать график:

 private void funcaoQualquer() 
     { 
      while (true) 
      { 
       funcaoArray[funcaoArray.Length - 1] = hScrollBar1.Value; 
       Array.Copy(funcaoArray, 1, funcaoArray, 0, funcaoArray.Length - 1); 
       if (chart1.IsHandleCreated) 
       { 
        this.Invoke((MethodInvoker)delegate { atualizaGraficoFuncaoQualquer(hScrollBar1.Value); }); 
       } 
       else 
       { 
        //... 
       } 
       Thread.Sleep(250); 
      } 
     } 

     private void atualizaGraficoFuncaoQualquer(int valor) 
     { 
      for (int i = 0; i < funcaoArray.Length - 1; ++i) 
      { 
       chart1.Series["Series1"].Points.Add(valor); 
      } 
     } 

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

ответ

1

вы можете установить формат, как это:

this.chart1.ChartAreas[0].AxisX.LabelStyle.Format = "mm:ss"; 

, если у вас есть частота дискретизации 4 Гц можно также использовать секунды и миллисекунды:

this.chart1.ChartAreas[0].AxisX.LabelStyle.Format = "ss.fff"; 

EDIT:

Я бы предложил поймать время выборки в дополнительном List<DateTime> и подать диаграмму через AddXY с помощью v alues. Вот простая программа, которая рисует кривую с помощью таймера. Таймер установлен на 500 мсек.

// Constructor 
public Form1() 
{ 
    InitializeComponent(); 
    // Format 
    this.chart1.ChartAreas[0].AxisX.LabelStyle.Format = "ss.fff"; 
    // this sets the type of the X-Axis values 
    chart1.Series[0].XValueType = ChartValueType.DateTime; 
    timer1.Start(); 
} 

int i = 0; 
List<DateTime> TimeList = new List<DateTime>(); 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    DateTime now = DateTime.Now; 
    TimeList.Add(now); 

    chart1.Series[0].Points.AddXY(now, Math.Sin(i/60.0)); 
    i+=2; 
} 

Теперь вы можете наблюдать приращение значений оси X в том формате, который вам нравится. Надеюсь, это поможет

+0

Похоже, что это не увеличивает время на оси x –

+0

, тогда я бы предложил собирать временные метки как 'DateTime' в списке и использовать' Points.AddXY (...) 'для передачи информации о x-координаты в диаграмме –

+0

@RaphaelPradodeOliveira Я сделал примерную программу, чтобы показать, как я это понимаю, и как это можно сделать. Я надеюсь, что это помогает. Взгляните на мое редактирование –