TeeChart中Boxplot系列的日期时间X轴

时间:2016-06-02 01:01:12

标签: c# teechart

目前,我在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轴使用DateTime值(定义如下):

var timeIndex = dataGroup.TimeSeriesIndex;

但是,Box类的Add方法不支持DateTime值。当我使用继承(来自基本系列类)Add(DateTime, double)方法(在foreach循环中)时,所有DateTime值都变为12 AM December 31, 1899,我认为它是DateTime.ToOADate的基本值。这让我相信我没有正确地将数据输入到系列中。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

  

所有DateTime值都变为1899年12月31日上午12点,我认为它是DateTime.ToOADate的基值。

确切地说,这就是垂直方块图在TeeChart中的工作方式。 X位置由其Position property确定,默认为零。为了达到您的要求,您应该为每个箱形图设置一个位置。这可以通过分配位置属性或通过specific add method override完成,如下面的代码段所示。对于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";