MsChart - Auto Zoom Y Axis on X Axis Zoom
سؤال
أنا أستخدم MsChart وأريد تمكين التكبير على محور X وبمجرد تكبير هذا ، أريد أن يقوم المحور Y بالتكبير التلقائي في نطاق مناسب للبيانات.
أي مساعدة في المشكلة ستكون موضع تقدير كبير!
شكرًا
المحلول
لا يمكن إنجاز نوع التكبير الذي تريد القيام به تلقائيًا بواسطة MSChart. بمجرد استرجاع نطاق "التكبير-في" X-Value من المستخدم ، تحتاج إلى كتابة المزيد من التعليمات البرمجية لإعادة تعيين تحجيم المحور Y بشكل مناسب.
يعمل هذا بسهولة أكبر إذا كنت تستخدم نمط خط لسلسلة البيانات ويتم تخزين بيانات المصدر لتلك السلسلة كقائمة فرعية.
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
بمجرد استخدام شيء مثل الرمز أعلاه للحصول على Miny و Maxy ، يمكنك بعد ذلك استخدام هذه القيم لإعادة ضبط قيم Min و Max Y على الرسم البياني:
With myChartArea
.AxisY.Maximum = maxY
.AxisY.Minimum = minY
End With
نصائح أخرى
كنت أبحث عن حل لفترة طويلة. لقد وجدت هذا مفيدًا. اشترك في حدث Axisvaluechanged واستخدم ScaleView لتعديل العرض.
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 أ مجموعة كاملة من العينات للتنزيل. في تطبيق العينة هناك واحد يسمى مظهر قابل للتمرير يبدو أن هذا يفعل ما تريد.
المظهر القابل للتمرير http://img502.imageshack.us/img502/5172/zoomablechart.png
يمكن للمستخدم تحديد ومساحة الرسم البياني وسيقوم بالتكبير. يمكنهم أيضًا التحرك باستخدام أشرطة التمرير.
C# يتم تضمين رمز نموذج مع التنزيل.