Повторяющаяся метка оси X диаграммы MS - отображение нескольких точек для одного элемента [Полоса диапазона]

Я создал элемент управления RangeBar MS Chart, который связывается с объектом данных. Эта таблица данных создается на основе данных из приведенного ниже списка. Проблема в том, что ось x показывает несколько точек для одного и того же элемента с разным диапазоном.

Список введите описание изображения здесь
Диаграмма MS
Ось X представляет 1-й столбец списка, а значения оси Y - 3-й и 4-й столбцы. "dt" - это имя, содержащее данные

введите описание изображения здесь

Код

chChart.Series["Series1"].ChartType = SeriesChartType.RangeBar;
chChart.Series["Series1"].Points.DataBind(dt.DefaultView, "Number", "Start Time,Stop Time","ToolTip=Name,Label=Name");

Пробовал связывать как разные серии, но все равно не работает.

  var IETable = (dt as System.ComponentModel.IListSource).GetList();
             chChart.DataBindCrossTable(IETable, "Number", "Number", "Start Time,Stop Time","");

                foreach (Series sr in chChart.Series)
                {
                    sr.ChartType = SeriesChartType.RangeBar;
                    sr.YValueType = ChartValueType.Time;

                    sr.XValueType = ChartValueType.String;


                }

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


person Thomas Mathew    schedule 09.10.2014    source источник
comment
Вы можете попробовать сначала вывести все данные в более управляемую форму, а затем добавить их обратно в диаграмму, chart.ChartAreas [0] .AxisY.CustomLabels.Add (...) для меток и то же самое для оси x. Вам нужно будет опубликовать немного больше о том, над чем вы работаете   -  person Vajura    schedule 13.10.2014
comment
@Vajura Я отредактировал свой вопрос для большей ясности.   -  person Thomas Mathew    schedule 13.10.2014
comment
Вы говорите, что ось X - это первый столбец (zzz-2 и т. Д.), Но на графике на картинке это ось Y (вертикальная ось = ось y). А со второй колонкой ничего не делаешь?   -  person Vajura    schedule 13.10.2014
comment
@Vajura: в случае типа диаграммы RangeBar ось x является вертикальной, а ось y - горизонтальной. Нет, я не использую второй столбец в списке.   -  person Thomas Mathew    schedule 13.10.2014
comment
Чтобы столбцы располагались в одном ряду, все значения должны быть в разных сериях.   -  person Jaska    schedule 16.10.2014
comment
О да, на самом деле это был StackedBar, который я когда-то использовал для имитации поведения RangeBar. Но я написал для вас ответ о том, как это сделать с помощью RangeBar.   -  person Jaska    schedule 17.10.2014
comment
@Jaska Спасибо. Скоро обновлю.   -  person Thomas Mathew    schedule 17.10.2014


Ответы (2)


введите описание изображения здесь

Добавьте 1 Series в диаграмму. Затем для серии убедитесь, что YValuesPerPoint = 2. Добавьте новый DataPoints, чтобы XValue представлял линию (в примере для линии ABC1, XValue = 1 и линии ABC2, XValue = 2. Для DataPoint.AxisLabel вы можете установить метку этой оси (в данном случае 'ABC1' и 'ABC2'). Затем для YValues значения указываются через запятую, например 1,2 или 7,20.

Пример:

        chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC1", XValue = 1, YValues = new double[] { 2,5 } });
        chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC1", XValue = 1, YValues = new double[] { 6,7 } });
        chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC1", XValue = 1, YValues = new double[] { 9,10 } });

        chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC2", XValue = 2, YValues = new double[] { 3,6 } });
        chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC2", XValue = 2, YValues = new double[] { 7,8 } });

Итак, ключ в том, что XValue должен быть одинаковым (двойным?) Для всех столбцов на одной линии.

person Jaska    schedule 17.10.2014
comment
Спасибо. Да, мне приходилось манипулировать точками данных индивидуально для каждой серии. Основываясь на индексе настраиваемой метки, я изменил значение X точки данных. - person Thomas Mathew; 20.10.2014

Манипулирование точками данных индивидуально для каждой серии помогло. Основываясь на индексе настраиваемой метки, я изменил значение X точки данных. «vn» - это строковый массив с именами настраиваемых меток.

var IETable = (dt as System.ComponentModel.IListSource).GetList();
chChart.DataBindCrossTable(IETable, "Number","","Start Time,StopTime","");

                  foreach (Series sr in chChart.Series)
                  {

                      sr.ChartType = SeriesChartType.RangeBar;
                      sr.XValueType = ChartValueType.String;
                      foreach (DataPoint p in sr.Points)
                      {
                          int dpIndex=0;
                          // foreach unique x axis value, increment dpIndex
                          //ToDoCode

                         //aligning the datapoint's X axis value in the middle

                          p.XValue = dpIndex + 0.5;

                      }

                  }
person Thomas Mathew    schedule 20.10.2014