Microsoft System.Web.UI.DataVisualization.Charting.Chart

Я строю Microsoft System.Web.UI.DataVisualization.Charting.Chart с тремя сериями (два столбца и линия наложения). Похоже, что верхняя граница оси Y вычисляется автоматически на основе диапазона данных в первом ряду, добавленном на диаграмму. Впоследствии любая серия не будет отображаться, если ее значение y больше, чем значение y первой серии. В этом случае я хотел бы использовать максимальное значение из любой серии.

Серии добавляются на диаграмму с помощью общего метода:

foreach (var s in model.Series)
            {
                var chartSeries = new Series(s.Title);

                chartSeries.ChartType = s.Type;
                chartSeries.Color = s.DrawColour;

                // add the data to the series
                foreach (DataRow row in data.Tables[0].Rows)
                {
                    chartSeries.Points.AddXY(row[model.XAxis.DataColumnName], row[s.ColumnName]);
                }
                // does the series name come from a column? if not use the plain text. if the column has a caption use it, otherwise the column name.
                chartSeries.Name = data.Tables[0].Columns.Contains(s.Title) ? String.IsNullOrEmpty(data.Tables[0].Columns[s.Title].Caption) ? data.Tables[0].Columns[s.Title].Caption : data.Tables[0].Columns[s.Title].ColumnName : s.Title;

                chart.Series.Add(chartSeries);
            }

Если я изменю порядок, в котором ряды добавляются к диаграмме, то область графика будет правильной, однако ряды строк будут находиться за столбцами.

Любые идеи? Спасибо.


person over the hill    schedule 13.08.2013    source источник


Ответы (1)


Я предполагаю, что у вас есть одна область диаграммы, в которую вы добавляете серию? Если это так, вы можете изменить максимальное значение оси Y, принадлежащее этой области диаграммы. Это будет что-то вроде этого:

// put this block above your foreach loop
double maxval = 100; // <-- put your maximum value here.
chart.ChartAreas[0].AxisY.Maximum = maxval;

Используя LINQ, вы можете легко найти максимальное значение во всех ваших сериях, а затем установить это обнаруженное максимальное значение как AxisY.Maximum.

person Bill Sambrone    schedule 13.08.2013
comment
Спасибо, я уже пробовал то же самое, но ваш ответ подтвердил, что я не схожу с ума (это был долгий день). Мне нужно было добавить дополнительный буфер к максимальному значению, чтобы он отображался. Мое максимальное значение было 9 310 836, но установка, которая обрезала верхнюю часть столбцов и большую часть строки. Увеличение его до 12 000 000 сработало как шарм. Совет: вы можете получить максимальное значение DataPoint в серии, используя: Series.Points.FindMaxByValue(Y1); - person over the hill; 14.08.2013