C# 如何将ColumnBar系列设置为图表
我想投影一个具有给定宽度的列(即从16-05-03 12:00:00到16-07-26 12:00:00),并沿x轴投影(即标签bool、int、long、bool、int-long)(见下图) 为此,我有两个图表区域,都有相同的参数C# 如何将ColumnBar系列设置为图表,c#,datetime,charts,range,C#,Datetime,Charts,Range,我想投影一个具有给定宽度的列(即从16-05-03 12:00:00到16-07-26 12:00:00),并沿x轴投影(即标签bool、int、long、bool、int-long)(见下图) 为此,我有两个图表区域,都有相同的参数 private void AddChartAreas(string name) { // AxisX chart1.ChartAreas.Add(name); chart1.ChartAreas[name].Axi
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);
第二个图表区(范围列系列):
要为条形图系列添加点,只需为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);
对于列范围系列:
var series = new Series {
Name = "S2",
Color = Color.LightSlateGray,
ChartType = SeriesChartType.RangeColumn
};
chart1.Series.Add(series);
pointIndex = series[1].Points.AddXY(values2[1], values2[5]);
现在看起来是这样的:
如何使它看起来像第一张图片。我想出了一个解决方案 我制作了一个范围栏系列,并将
点宽度设置为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]);
这会给我想要的结果。我想出了一个解决方案
我制作了一个范围栏系列,并将点宽度设置为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]);
这将给我我想要的结果