MSChart - Zoom automatique Axe Y sur l'axe X Zoom
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
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.