MSChart — автоматическое масштабирование по оси Y по оси X

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

Будем признательны за любую помощь в решении проблемы!

Спасибо


person ChrisAU    schedule 13.01.2010    source источник


Ответы (3)


Тип масштабирования, который вы хотите сделать, не может быть автоматически выполнен MSChart. После того, как вы получили от пользователя диапазон значений X «Увеличения», вам нужно написать еще немного кода, чтобы соответствующим образом сбросить масштабирование по оси 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
person Stewbob    schedule 24.02.2010

Я долго искал решение. Я нашел это полезным. Подпишитесь на событие 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;
        }
    }
person Shivaram K R    schedule 07.12.2011