Question

J'utilise MSChart et je veux activer le zoom sur l'axe X et une fois que cela est zoomée je veux l'axe Y à zoom automatique dans une plage appropriée pour les données visibles.

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

Merci

Était-ce utile?

La solution

Le type de zoom que vous voulez faire ne peut être accompli automatiquement par MSChart. Une fois que vous avez récupéré le « Zoom-In » plage de valeurs X de l'utilisateur, vous devez écrire un peu plus de code pour réinitialiser l'axe Y mise à l'échelle appropriée.

Cela fonctionne plus facilement si vous utilisez un style de ligne de séries de données et vos données source pour cette série est enregistrée comme SortedList.

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 les valeurs min et-axe Y max sur le ChartArea:

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

Autres conseils

Je cherchais une solution depuis longtemps. J'ai trouvé cela utile. Abonnez-vous à l'événement AxisValueChanged et utiliser 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;
        }
    }

Microsoft a mis à disposition un gamme d'échantillons pour le téléchargement. Dans l'exemple d'application il y a un appelé Défilant Apparence qui semble faire ce que vous voulez.

Scrollable Apparence 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 # Exemple de code est inclus dans le téléchargement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top