2011-05-19 3 views
3

Je suis en train de créer une application qui représente graphiquement les données en continu. Je peux recevoir et ajouter des points de données au graphique, mais après l'ajout de chaque point, le graphique modifie son échelle pour inclure automatiquement tous les points de données (les points se rapprochent au fur et à mesure que d'autres sont ajoutés). Comment puis-je l'éteindre?.Net Chart Control Défilement automatique/Désactivation de l'échelle automatique

Idéalement, j'aimerais que le graphique défile simplement le long de l'axe x plutôt que de régler l'échelle chaque fois qu'un point est ajouté. Quelle est la meilleure façon de procéder?

Voici le code que j'utilise pour ajouter un point de données sous forme de données arrive sur le port série:

chart1.Series["Series1"].Points.AddY(parsed); 

Le graphique est juste un tracé par défaut de ligne rapide. Voici les captures d'écran du graphique qui traçaient les données au fil du temps. Comme vous pouvez le voir, il suffit de comprimer le graphique au fil du temps plutôt que de laisser la balance seule et de la faire défiler vers la droite. After a few seconds After a few more seconds

+0

Avez-vous trouvé une solution pour ce compteur? –

Répondre

0

Cela désactive l'auto-mise à l'échelle:

chart1.ChartAreas[0].AxisY.ScaleBreakStyle.Enabled = false; 
chart1.ChartAreas[0].AxisY.Maximum = 0.3; 
chart1.ChartAreas[0].AxisY.Minimum = -0.3; 
+0

Cela ne fonctionne pas. Le problème était avec la compression sur l'axe des x. J'ai trouvé une solution, mais je ne pense pas que ce soit si élégant. Au fur et à mesure que les points de données sont ajoutés au graphique, la différence entre le maximum et le minimum de l'axe des x est calculée et si elle est supérieure à une certaine valeur, le minimum est incrémenté, faisant ainsi défiler le graphique. 'if ((chart1.ChartAreas [0] .AxisX.Maximum - chart1.ChartAreas [0] .AxisX.Minimum)> 20) {chart1.ChartAreas [0] .AxisX.Minimum ++; } ' – isometrik

0

Iv'e fait cela de la manière suivante:

Edit est une maquette qui ajoute des points sur chaque timer tick minimum et les valeurs maximales sont incrémentées, de sorte que la partie affichée est incrémentée et qu'un effet de défilement se produit.

private void mockTimerTick(object sender, EventArgs e) 
{ 
     int i; 

     if (isRunning) 
      return; 

     lock (_syncObj) 
     { 
      isRunning = true; 
      for (i = currentOffset; i < samplesPerSegment + currentOffset; i++) 
      { 
       _series.Points.AddXY(mockPoints[i].X, mockPoints[i].Y); 

       if (i >= _chart.ChartAreas["ChartArea1"].AxisX.Maximum) 
       { 
        _chart.ChartAreas["ChartArea1"].AxisX.Maximum++; 
        _chart.ChartAreas["ChartArea1"].AxisX.Minimum++; 
        _chart.ChartAreas["ChartArea1"].AxisX.ScaleView.Scroll(_chart.ChartAreas["ChartArea1"].AxisX.Maximum); 

       }    
      } 
      isRunning = false; 
     } 

     currentOffset = i; 
} 
Questions connexes