目前,我在TeeChart中有多个箱线图,我添加了如下:
seriesIndex = 0;
foreach(var dataGroup in DataGroups) //Each dataGroup contains all the ParameterValues at a specific point in time
{
var series = new Box() { ... }
var values = dataGroup.ParameterValues;
series.Add(seriesIndex, values);
seriesIndex++;
Chart.Series.Add(series);
}
我想转换它,以便 X 轴使用日期时间值(定义如下):
var timeIndex = dataGroup.TimeSeriesIndex;
但是,Box 类的 Add 方法不支持日期时间值。当我使用继承的(来自基系列类)Add(DateTime, double)
方法(在 foreach 循环中)时,所有 DateTime 值都变得12 AM December 31, 1899
我认识到这是DateTime.ToOADate
的基值。这让我相信我没有将数据正确输入到序列中。有人可以指出我正确的方向吗?
所有 DateTime 值都变为 1899 年 12 月 31 日凌晨 12 点,我认为这是 DateTime.ToOADate 的基值。
没错,这就是垂直箱形图在 TeeChart 中的工作方式。X 位置由其 Position 属性确定,默认情况下该属性为零。要实现您的要求,您应该为每个箱线图设置一个位置。这可以分配 Position 属性或通过特定的 add 方法重写来完成,如下面的代码片段所示。对于 DateTime 标签,您只需将 XValues.DateTime 设置为 true,然后让 TeeChart 自动计算标签或使用以下代码中显示的标签技巧:
tChart1.Aspect.View3D = false;
var boxSeries1 = new Steema.TeeChart.Styles.Box(tChart1.Chart);
var boxSeries2 = new Steema.TeeChart.Styles.Box(tChart1.Chart);
var boxSeries3 = new Steema.TeeChart.Styles.Box(tChart1.Chart);
boxSeries1.Add(DateTime.Now.AddDays(0).ToOADate(), new double[6] { 3, 6, 8, 15, 19, 21 });
boxSeries2.Add(DateTime.Now.AddDays(1).ToOADate(), new double[4] { 5, 7, 12, 21 });
boxSeries3.Add(DateTime.Now.AddDays(2).ToOADate(), new double[5] { 6, 7, 8, 15, 21 });
// A simple trick to force custom axis labels on bottom axis.
// In this case, series titles
Steema.TeeChart.AxisLabelsItems labels = tChart1.Axes.Bottom.Labels.Items;
labels.Clear();
foreach (Steema.TeeChart.Styles.Box b in tChart1.Series)
{
b.XValues.DateTime = true;
labels.Add(b.Position);
}
tChart1.Axes.Bottom.Labels.DateTimeFormat = "dd/MM/yyyy hh:mm";