图形将时间添加到数组中的每个值

Graph add time to every value in a Array

我得到一个整数数组from a file

示例:

0: 56
1: 57
2: 58
3: 59
4: 60
5: 61
6: 62
7: 63

我已经使用 Linq 从中获取了所有数据,现在我有了一个 INT 数组

如何告诉图表每个值都与上一个值相差 15 分钟,以便它可以正确绘制?

X 系列已设置为 "time"

我如何从文件中读取数据:

int[] data = File
              .ReadLines(file)
              .Select(line => line.Substring(line.IndexOf(':') + 1))
              .Where(line => !string.IsNullOrWhiteSpace(line))
              .Select(line => int.Parse(line))
              .ToArray();

              chart1.DataSource = data;
  • 第 1 步:确保 x-values 实际上是有效且正确的时间。

  • 第 2 步格式化轴以显示正确的间隔。

使用直接数据点添加的示例:

DateTime start = DateTime.Now;
chart.Series[0].XValueType = ChartValueType.DateTime;

//loop over x..:
  chart.Series[0].Points.AddXY(start.AddMinutes(x * 15, start), yValue);

您可以使用相同的函数将您必须的整数转换为数据源中 15 分钟时间步长的升序。

要进行格式化,您可以使用如下代码:

Axis ax = chart.ChartAreas[0].AxisX;

ax.LabelStyle.Format = "HH:mm";
ax.IntervalType = DateTimeIntervalType.Minutes;
ax.Interval = 15;

更新:

答案显示了如何将数据转换为合适的形式以及如何设置图表格式。它忽略了您获取数据的方式。

你完全丢掉了台词的第一部分。您也永远不会显示数据绑定的完整代码。

这是第一个读取两部分数据的 Linq 代码:

var data = File.ReadLines(file)
    .Where(line => !string.IsNullOrWhiteSpace(line))
    .Select( line => line.Split(':') )
    .Select( parts => new { x = int.Parse(parts[0]), y = int.Parse(parts[1]) } )
    .ToArray();

但是 x-values 仍然只是整数。这是一个将它们转换为 DateTimes 的代码,从每个 int:

计算 15 分钟的间隔
DateTime start = DateTime.Now;

var chartData = File.ReadLines(file)
    .Where(line => !string.IsNullOrWhiteSpace(line))
    .Select( line => line.Split(':') )
    .Select( parts => new { x = start.AddMinutes(int.Parse(parts[0]) * 15), y = int.Parse(parts[1]) } )
    .ToArray();

您可以像这样将它们绑定到图表:

s.XValueMember = "x";
s.YValueMembers = "y";
chart.DataSource = chartData;

请注意,您需要将图表放大 400 多个点才能看到 15 分钟的间隔。