Удалить лишние значения оси X

У меня проблемы с удалением лишних значений в столбце x. По сути, мой график не начинается с 0 и не заканчивается в моей последней точке данных. Я попытался начать ось с 0, а также установить смещение интервала на -20 (мой интервал - 20).

Можно ли как-нибудь избавиться от лишних значений по обе стороны от моих данных?

string[] xValues = new string[5] { "QE1", "QE2", "QE3", "QE4", $"{DateTime.Now.ToShortDateString()}" };

        PlotBaselines(xValues);

        var amCost = new Series()
        {
            Name = "AmCost",
            Color = Color.Blue,
            IsVisibleInLegend = true,
            IsXValueIndexed = true,
            ChartType = SeriesChartType.Line
        };
        impairmentGraph.Series.Add(amCost);
        // Test Values 0 - 20
        float[] amCostValues = new float[5] { 5, 15, 20, 13, 6 };
        impairmentGraph.Series["AmCost"].Points.DataBindXY(xValues, amCostValues);

Вот код для серии. Каждый одинаков.

impairmentGraph.ChartAreas[0].AxisY.Maximum = 100; impairmentGraph.ChartAreas[0].AxisY.Interval = 20; impairmentGraph.ChartAreas[0].AxisX.IntervalOffset = -20; impairmentGraph.ChartAreas[0].AxisX.IsStartedFromZero = true;

Вот единственный код настройки, который я использую.

Картинка, иллюстрирующая мою проблему

1 ответ

Решение

Вам нужно установить Minimum а также Maximum вашей оси х.

Но: Это может работать, только если вы добавили значения x в виде чисел (или даты-времени) ! Ваш нет!

Вот изменения, которые помогут:

Измените значения x на числа:

 double[] xValues = new double[5] {  1,2,3,4,5 };

Поместите ваши метки в другой массив:

 string[] xLabels = new string[5] { "QE1", "QE2", "QE3", "QE4", 
                                    $"{DateTime.Now.ToShortDateString()}" };

После привязки данных вам нужно установить AxisLabels для DataPoints:

 for (int i = 0; i < xValues.Length; i++)
            impairmentGraph.Series["AmCost"].Points[i].AxisLabel = xLabels[i];

Теперь вы можете установить диапазон, который будет отображать ось X:

 impairmentGraph.ChartAreas[0].AxisX.Minimum = 1;
 impairmentGraph.ChartAreas[0].AxisX.Maximum = 5;

С моими данными результат выглядит так:

Обратите внимание, что когда вы добавляете x-значения как string все они будут преобразованы в double в результате чего значения 0,0d для всех точек. (Проверьте это в отладчике!!) Поэтому вы больше не можете их использовать ни для чего; не для установки диапазона, ни для форматирования этикеток, ни для подачи Tooltips так далее..

Тот факт, что строки сначала подаются в AxisLabels вводит в заблуждение многих людей, полагая, что все хорошо, это не..

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

Другие вопросы по тегам