2016-11-15 1 views
1

Я хочу проецировать столбец с заданной шириной (ei с 16-05-03 12:00:00 до 16-07-26 12:00:00) и что это проекты все по оси x (ei labels bool, int, long, bool, int long) (см. рисунок ниже).Как установить серию ColumnBar на диаграмму

enter image description here

Для этого у меня есть 2 области диаграмм оба имеют те же самые параметры.

private void AddChartAreas(string name) 
{ 
     // AxisX 
     chart1.ChartAreas.Add(name); 
     chart1.ChartAreas[name].AxisX.MajorGrid.Enabled = false; 
     chart1.ChartAreas[name].AxisX.Interval = 1; 

     // AxisY 
     chart1.ChartAreas[name].AxisY.ScrollBar.Enabled = true; 
     chart1.ChartAreas[name].AxisY.ScaleView.Zoomable = true; 
     chart1.ChartAreas[name].AxisY.MajorGrid.Enabled = false; 
     chart1.ChartAreas[name].AxisY.LabelStyle.Format = "yyyy-MM-dd hh:mm:ss"; 

     chart1.ChartAreas[name].AxisY.Interval = 0; 
     chart1.ChartAreas[name].AxisY.IntervalType = DateTimeIntervalType.Years; 
     minDate = new DateTime(2016, 01, 01, 00, 00, 00, 000); 
     maxDate = new DateTime(2016, 12, 01, 00, 00, 00, 000); // or DateTime.Now; 
     chart1.ChartAreas[name].AxisY.Minimum = minDate.ToOADate(); 
     chart1.ChartAreas[name].AxisY.Maximum = maxDate.ToOADate(); 
     chart1.ChartAreas[name].AxisY.LabelStyle.IsEndLabelVisible = true; 
     chart1.ChartAreas[name].AxisY.IsLabelAutoFit = true; 
     chart1.ChartAreas[name].AxisY.LabelStyle.ForeColor = Color.Yellow; 

     chart1.ChartAreas[name].Axes[0].Enabled = AxisEnabled.False; 
     chart1.ChartAreas[name].Axes[1].Enabled = AxisEnabled.False; 

     chart1.ChartAreas[name].BackColor = Color.Transparent; 
     chart1.ChartAreas[name].Position.Height = 100; 
     chart1.ChartAreas[name].Position.Width = 100; 
     chart1.ChartAreas[name].InnerPlotPosition.Height = 90; 
     chart1.ChartAreas[name].InnerPlotPosition.Width = 80; 
     chart1.ChartAreas[name].InnerPlotPosition.X = 10; 
} 

Первая область диаграммы (бар серии) создается следующим образом:

var series = new Series { 
      Name = "S1", 
      Color = Color.LightSlateGray, 
      ChartType = SeriesChartType.Bar 
}; 

chart1.Series.Add(series); 

Вторая область диаграммы (диапазон колонки серии):

var series = new Series { 
       Name = "S2", 
       Color = Color.LightSlateGray, 
       ChartType = SeriesChartType.RangeColumn 
}; 

chart1.Series.Add(series); 

Чтобы добавить точки для таблицы bar просто привяжите 2 списка для x, y:

 var lables = new string[6]; 
     var values = new DateTime[6]; 

     minDate = new DateTime(2016, 01, 01, 00, 00, 00, 000); 

     // Dummy data 
     lables[0] = "bool"; 
     lables[1] = "int"; 
     lables[2] = "long"; 
     lables[3] = "bool"; 
     lables[4] = "int"; 
     lables[5] = "long"; 

     // Dummy data 
     values[0] = minDate.AddMonths(10); 
     values[1] = minDate.AddMonths(10); 
     values[2] = minDate.AddMonths(10); 
     values[3] = minDate.AddMonths(10); 
     values[4] = minDate.AddMonths(10); 
     values[5] = minDate.AddMonths(10); 

     // Simply bind 2 lists 
     series[0].Points.DataBindXY(lables, values); 

Для диапазона серии колонки:

pointIndex = series[1].Points.AddXY(values2[1], values2[5]); 

Прямо сейчас это выглядит следующим образом:

enter image description here

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

ответ

0

Я придумал решение.

Вместо колонки в диапазоне я делаю диапазон бар серии а и установить PointWidth в 5:

var series = new Series { 
       Name = "S2", 
       Color = Color.LightSlateGray, 
       ChartType = SeriesChartType.Rangebar 
}; 

series["PointWidth"] = "5"; 

chart1.Series.Add(series); 

чем при печати:

minDate = new DateTime(2016, 01, 01, 00, 00, 00, 000); 

values2[0] = minDate.AddMonths(1);  
values2[1] = minDate.AddMonths(2); 

pointIndex = series2.Points.AddXY(values2[1], values2[1]); 

Это даст мне результаты, которые я хотеть.