2010-01-13 8 views
2

J'utilise MSChart et je veux activer le zoom sur l'axe X et une fois que ce zoom est zoomé, je veux que l'axe Y pour zoom automatique dans une gamme appropriée pour les données visibles.MSChart - Zoom automatique axe Y sur axe X Zoom

Toute aide apportée à ce problème serait grandement appréciée!

Merci

Répondre

2

Le type de zoom que vous souhaitez effectuer ne peut pas être effectué automatiquement par MSChart. Une fois que vous avez récupéré la plage de valeurs X 'Zoom-In' de l'utilisateur, vous devez écrire un peu plus de code pour réinitialiser la mise à l'échelle de l'axe Y de manière appropriée.

Cela fonctionne plus facilement si vous utilisez une série de données de type Ligne et que vos données source pour cette série sont stockées en tant que liste triée.

Dim firstXindex as Int32 = myDataSeries.IndexOfKey(firstXzoomValue) 
Dim lastXindex as Int32 = myDataSeries.IndexOfKey(lastXzoomValue)  

Dim minY as Double = 1.7E+308 
Dim maxY as Double = -1.7E+308 


For i = firstXindex To lastXindex 
    If myDataSeries.GetByIndex(i) > maxY Then 
     maxY = myDataSeries.GetByIndex(i) 
    End If 
    If myDataSeries.GetByIndex(i) < minY Then 
     minY = myDataSeries.GetByIndex(i) 
    End If 
Next 

Une fois que vous avez utilisé quelque chose comme le code ci-dessus pour obtenir votre minY et maxY, vous pouvez ensuite utiliser ces valeurs pour réinitialiser le min et max valeurs de l'axe Y sur la ChartArea:

With myChartArea 
    .AxisY.Maximum = maxY 
    .AxisY.Minimum = minY 
End With 
0

Microsoft ont mis à disposition un whole range of samples pour le téléchargement. Dans l'exemple d'application, il y en a un appelé Scrollable Apparence qui semble faire ce que vous voulez.

Scrollable Appearance http://img502.imageshack.us/img502/5172/zoomablechart.png

L'utilisateur peut sélectionner et zone du graphique et il zoome. Ils peuvent aussi se déplacer en utilisant les barres de défilement.

C# Un exemple de code est inclus avec le téléchargement.

+1

Ceci ne fait pas automatiquement un zoom sur la plage de valeurs Y appropriée en fonction de la plage de valeurs X sélectionnée par l'utilisateur – ChrisAU

3

Je cherchais une solution depuis longtemps. J'ai trouvé cela utile. Abonnez-vous à l'événement AxisValueChanged et utilisez ScaleView pour modifier la vue.

private void chart1_AxisViewChanged(object sender, ViewEventArgs e) 
    { 
     if (e.Axis.AxisName == AxisName.X) 
     { 
      int start = (int)e.Axis.ScaleView.ViewMinimum; 
      int end = (int)e.Axis.ScaleView.ViewMaximum; 

      double[] temp = chart1.Series[0].Points.Where((x, i) => i >= start && i <= end).Select(x => x.YValues[0]).ToArray(); 
      double ymin = temp.Min(); 
      double ymax = temp.Max(); 

      chart1.ChartAreas[0].AxisY.ScaleView.Position = ymin; 
      chart1.ChartAreas[0].AxisY.ScaleView.Size = ymax - ymin; 
     } 
    }