创建次x轴
本文关键字:创建 | 更新日期: 2023-09-27 18:19:39
我得到了一个看起来像这样的表:
Date | 1/1/13 | 1/8/13 | ...
| Group1 | Group2 | Group3 | Group1 | Group2 | Group3 | ...
Type1 | 1 | 2 | 3 | 5 | 6 | 7 | ...
Type2 | 6 | 5 | 4 | 4 | 8 | 0 | ...
Type3 | 7 | 8 | 9 | 9 | 3 | 2 | ...
我的任务是使用MS图表创建一个图形来表示这些数据。该表表示某个组在显示日期结束的一周内完成的任务(类型1/2/3)。我的想法是创建一个条形图,先按日期分组,然后按组分组。我希望我的x轴看起来像上面的表格标题。
我查过次轴的主题,我能找到的都是次Y轴。这与我想要的不同,因为它代表了每个y轴上的不同序列。我希望能够表示一个系列,但有两个x轴标签。这可能吗?我不相信这是真的,因为数据点只能有两个值
var chart = new Chart();
chart.ChartAreas.Add(new ChartArea());
var series= new Series("series");
series.ChartType = SeriesChartType.Column;
series.XAxisType = AxisType.Primary;
//Magic secondary axis code
//Add data points
chart.Series.Add(series);
以下是我计划使用的课程,仅供参考。
类别
public class ChartGroup
{
public string GroupName
public int Type1
public int Type2
public int Type3
}
public class ChartDate
{
public DateTime Date
public List<ChartGroup> GroupData
}
public class Chart
{
public List<ChartDate> ChartData
}
编辑:我相信可以通过为每种类型制作一个系列,并在Date
的x轴上绘制图形来创建这样的图表。这是唯一的路吗?
可以有一个辅助X轴。这里有一个例子(这并不完全是你想做的,但应该向你展示如何使用辅助X轴):
DateTime firstDay = new DateTime(2013, 01, 01);
DateTime secondDay = new DateTime(2013, 01, 02);
int[] group1 = new int[6] { 1, 6, 7, 5, 4, 9 };
int[] group2 = new int[6] { 2, 5, 8, 6, 8, 3 };
DateTime[] days = new DateTime[6] { firstDay, firstDay, firstDay, secondDay, secondDay, secondDay};
chart.Series.Add(new Series("Group 1"));
chart.Series[0].Points.DataBindXY(days, group1);
chart.Series[0].ChartType = SeriesChartType.Column;
chart.Series.Add(new Series("Group 2"));
chart.Series[1].Points.DataBindXY(days, group2);
chart.Series[1].ChartType = SeriesChartType.Column;
double start = chart.Series[0].Points[0].XValue;
double end = chart.Series[0].Points[chart.Series[0].Points.Count -1].XValue;
double half = (start + end) / 2;
chart.ChartAreas[0].AxisX2.Enabled = AxisEnabled.True;
chart.ChartAreas[0].AxisX2.CustomLabels.Add(start, end, "General Label", 0, LabelMarkStyle.Box);
chart.ChartAreas[0].AxisX2.CustomLabels.Add(start, half, "Day 1", 1, LabelMarkStyle.LineSideMark);
chart.ChartAreas[0].AxisX2.CustomLabels.Add(half, end, "Day 2", 1, LabelMarkStyle.LineSideMark);