Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#向TeeChart X轴添加负时间戳?_C#_Datetime_Timespan_Teechart - Fatal编程技术网

如何使用C#向TeeChart X轴添加负时间戳?

如何使用C#向TeeChart X轴添加负时间戳?,c#,datetime,timespan,teechart,C#,Datetime,Timespan,Teechart,我有带有相对时间戳(as)的数据。例如: RelativeTimestamp (hh:mm) | Data1 | Data2 -00:03 2.2 1.3 -00:01 2.5 1.5 00:00 2.4 1.6 00:02 2.7 1.7 00:08

我有带有相对时间戳(as)的数据。例如:

RelativeTimestamp (hh:mm) | Data1 | Data2
-00:03                      2.2     1.3
-00:01                      2.5     1.5
 00:00                      2.4     1.6
 00:02                      2.7     1.7
 00:08                      2.1     1.9
我想用C#制作一个TeeChart来绘制这些数据系列。然而当我尝试

series.Add(row["RelativeTimestamp"], row["Data1"]);
它抱怨我不能在水平轴上使用时间戳。所以我也试着用

但是,当然,这使得时间戳序列变成23:57,-23:59等等,而不是任何负数

那么,如何在X轴上制作负时间戳标签呢


我们可以假设相对时间戳不大于24小时正或负。

我能想到的最简单的解决方案是使用基于时间跨度的文本标签,例如:

  var line1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
  var y = new Random();

  for (int i = -20; i < 20; i++)
  {
    var referenceTime = DateTime.Today.AddDays(1);
    var currentTime = DateTime.Now.AddHours(i);
    var timeSpan = referenceTime - currentTime;

    var label = timeSpan.ToString(@"h\h\:m\m");
    label = (currentTime < referenceTime) ? "-" + label : label;

    line1.Add(y.Next(), label);
  }

  tChart1.Axes.Bottom.Labels.Angle = 90;
var line1=新的Steema.TeeChart.Styles.Line(tChart1.Chart);
var y=新的随机变量();
for(int i=-20;i<20;i++)
{
var referenceTime=DateTime.Today.AddDays(1);
var currentTime=DateTime.Now.AddHours(i);
var timeSpan=参考时间-当前时间;
var label=timeSpan.ToString(@“h\h \:m\m”);
标签=(当前时间<参考时间)?“-”+标签:标签;
第1行。添加(y.Next(),标签);
}
tChart1.Axes.Bottom.Labels.Angle=90;
这将生成此图表:


我能想到的最简单的解决方案是使用基于时间跨度的文本标签,例如:

  var line1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
  var y = new Random();

  for (int i = -20; i < 20; i++)
  {
    var referenceTime = DateTime.Today.AddDays(1);
    var currentTime = DateTime.Now.AddHours(i);
    var timeSpan = referenceTime - currentTime;

    var label = timeSpan.ToString(@"h\h\:m\m");
    label = (currentTime < referenceTime) ? "-" + label : label;

    line1.Add(y.Next(), label);
  }

  tChart1.Axes.Bottom.Labels.Angle = 90;
var line1=新的Steema.TeeChart.Styles.Line(tChart1.Chart);
var y=新的随机变量();
for(int i=-20;i<20;i++)
{
var referenceTime=DateTime.Today.AddDays(1);
var currentTime=DateTime.Now.AddHours(i);
var timeSpan=参考时间-当前时间;
var label=timeSpan.ToString(@“h\h \:m\m”);
标签=(当前时间<参考时间)?“-”+标签:标签;
第1行。添加(y.Next(),标签);
}
tChart1.Axes.Bottom.Labels.Angle=90;
这将生成此图表:


我最终使用了
Series.Add(DateTime X,double Y,string Label)
,我起初没有注意到它的存在。这很好,因为我可以将数据放在X轴上的正确位置,但给它一个自定义标签,即使时间戳分布不均匀:

foreach (DataRow in data.Rows) {
    DateTime RelativeTimestamp_DT = DateTime.MinValue + row["RelativeTimestamp"];

    string label = row["RelativeTimestamp"].ToString(@"hh\:mm");
    if (row["RelativeTimestamp"] < new TimeSpan(0)) {
        label = "-" + label;
    }

    series.Add(row["RelativeTimestamp"], row["Data1"], label);
    series.Add(row["RelativeTimestamp"], row["Data2"], label);
}
foreach(data.Rows中的DataRow){
DateTime RelativeTimestamp_DT=DateTime.MinValue+行[“RelativeTimestamp”];
字符串标签=行[“RelativeTimestamp”]。ToString(@“hh \:mm”);
如果(行[“RelativeTimestamp”]<新时间跨度(0)){
label=“-”+标签;
}
添加(第[“RelativeTimestamp”]行,第[“Data1”]行,标签);
添加(第[“RelativeTimestamp”]行,第[“Data2”]行,标签);
}

我最终使用了
Series.Add(DateTime X,double Y,string Label)
,我起初没有注意到它的存在。这很好,因为我可以将数据放在X轴上的正确位置,但给它一个自定义标签,即使时间戳分布不均匀:

foreach (DataRow in data.Rows) {
    DateTime RelativeTimestamp_DT = DateTime.MinValue + row["RelativeTimestamp"];

    string label = row["RelativeTimestamp"].ToString(@"hh\:mm");
    if (row["RelativeTimestamp"] < new TimeSpan(0)) {
        label = "-" + label;
    }

    series.Add(row["RelativeTimestamp"], row["Data1"], label);
    series.Add(row["RelativeTimestamp"], row["Data2"], label);
}
foreach(data.Rows中的DataRow){
DateTime RelativeTimestamp_DT=DateTime.MinValue+行[“RelativeTimestamp”];
字符串标签=行[“RelativeTimestamp”]。ToString(@“hh \:mm”);
如果(行[“RelativeTimestamp”]<新时间跨度(0)){
label=“-”+标签;
}
添加(第[“RelativeTimestamp”]行,第[“Data1”]行,标签);
添加(第[“RelativeTimestamp”]行,第[“Data2”]行,标签);
}

答案很好,但只有在时间戳规则的情况下,这看起来才正确。就像在你的代码中,它们彼此间隔25小时(?)。趋势不正确,例如,如果有较长或较短的中断。@Travenin,谢谢。时间戳的间隔为1小时。我这样做是为了得到一个简单的自动自包含示例。标签每隔一小时才显示一次,以避免重叠。答案很好,但只有在时间戳规则的情况下,这看起来才正确。就像在你的代码中,它们彼此间隔25小时(?)。趋势不正确,例如,如果有较长或较短的中断。@Travenin,谢谢。时间戳的间隔为1小时。我这样做是为了得到一个简单的自动自包含示例。标签仅每隔一小时显示一次,以避免重叠。