Как заставить диаграмму автоматически настроить максимум оси Y? - PullRequest
21 голосов
/ 09 января 2012

У меня есть .NET-диаграмма, которую я заполняю во время выполнения

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

            Series s = new Series();
            s.Font = new Font("Verdana", 8f);                

            int i = 0;
            foreach (var month in line.Months)
            {
                DataPoint p = new DataPoint();

                p.XValue = i;
                p.YValues = new Double[] { month.LineValue ?? 0 };
                s.Points.Add(p);

                i++;
            }

Когда я заполняю график во второй раз, максимум оси Y остается на 2000, т.е. не пересчитывается

Как заставить пересчитать?

У меня включен ScaleBreakStyle по оси Y

Если я пытаюсь установить для IsLogarithmic значение true по оси Y, я получаю X вместо диаграммы

Я использую Visual Studio 2010 с System.Windows.forms.DataVisualization.Charting.Chart

Пол

Ответы [ 3 ]

37 голосов
/ 05 марта 2013

chart.ChartAreas[0].RecalculateAxesScale();

10 голосов
/ 15 мая 2012

В документах сказано, что для свойства Axis.Maximum по умолчанию используется значение NaN (не число), поэтому вы сможете снова включить функцию автоматического масштабирования, установив его обратно в это значение.значение .

Примерно так ...

chart.ChartAreas[0].AxisY.Maximum = Double.NaN;

ОБНОВЛЕНИЕ / ИСПРАВЛЕНИЕ

Ответ Антона верен;вы должны использовать:

ChartArea.RecalculateAxesScale();

В соответствии с RecalculateAxesScale() документами :

... иногда необходимо пересчитать свойства области диаграммы так, чтобычто диаграмма отображается правильно.Например, если диапазон оси изменяется, метки для этой оси должны быть пересчитаны.

По-видимому, он был доступен с .NET 4.0.

3 голосов
/ 03 августа 2016

вам нужно запустить эту последовательность:

AxisY.Maximum = Double.NaN; // sets the Maximum to NaN
AxisY.Minimum = Double.NaN; // sets the Minimum to NaN
enter code herechart.ChartAreas[0].RecalculateAxesScale(); // recalculates the Maximum and Minimum values, since they are set to NaN
...