MSChart - Авто Zoom Ось Y на оси X Zoom - PullRequest
2 голосов
/ 14 января 2010

Я использую MSChart и хочу включить масштабирование по оси X, и после увеличения масштаба я хочу, чтобы ось Y автоматически увеличивала диапазон, подходящий для просмотра данных.

Любая помощь с проблемой будет принята с благодарностью!

Спасибо

Ответы [ 3 ]

3 голосов
/ 07 декабря 2011

Я долго искал решение. Я нашел это полезным. Подпишитесь на событие 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;
        }
    }
2 голосов
/ 24 февраля 2010

Масштабирование, которое вы хотите сделать, не может быть автоматически выполнено MSChart. После того, как вы получили от пользователя диапазон значений «Zoom-In», вам нужно написать немного больше кода для правильного сброса масштабирования по оси Y.

Это легче всего работает, если вы используете стиль линий рядов данных, а ваши исходные данные для этого ряда хранятся в виде 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

После того, как вы использовали что-то вроде кода выше, чтобы получить ваши minY и maxY, вы можете затем использовать эти значения для сброса минимальных и максимальных значений оси Y в ChartArea:

With myChartArea
  .AxisY.Maximum = maxY
  .AxisY.Minimum = minY
End With
0 голосов
/ 05 февраля 2010

Microsoft предоставила для загрузки целый ряд образцов . В примере приложения есть приложение под названием Scrollable Appearance , которое, кажется, выполняет то, что вы хотите.

Внешний вид с прокруткой http://img502.imageshack.us/img502/5172/zoomablechart.png

Пользователь может выбрать и область графика, и он будет увеличиваться. Они также могут перемещаться с помощью полос прокрутки.

C # Пример кода прилагается к загрузке.

...