使用日期时间轴打印数据
C#可以用DateTime
类型,但ScottPlot的所有方法都更喜欢double
数组。本页介绍如何使用ScottPlot绘制具有时间轴的数据。
💡 TLDR:转换DateTime
到double
使用DateTime.ToOATime()
在策划之前,请致电XAxis.DateTimeFormat(true)
以正确的格式显示轴标记标签。
散点图
- 如果时间点间隔不均匀,应使用散点图(否则应考虑信号图)。
- 使用LINQ和
DateTime.ToOATime()
皈依DateTime[]
到double[]
在策划之前 - 呼叫
XAxis.DateTimeFormat(true)
要指示轴,刻度标签的格式应为DateTime
值(而不是默认的数字格式)
// generate sample data (arrays of individual DateTimes and values)
int pointCount = 100;
Random rand = new Random(0);
double[] values = ScottPlot.DataGen.RandomWalk(rand, pointCount);
DateTime[] dates = Enumerable.Range(0, pointCount)
.Select(x => new DateTime(2016, 06, 27).AddDays(x))
.ToArray();
// use LINQ and DateTime.ToOADate() to convert DateTime[] to double[]
double[] xs = dates.Select(x => x.ToOADate()).ToArray();
// plot the double arrays using a traditional scatter plot
var plt = new ScottPlot.Plot(600, 400);
plt.AddScatter(xs, values);
// indicate the horizontal axis tick labels should display DateTime units
plt.XAxis.DateTimeFormat(true);
// add padding to the right to prevent long dates from flowing off the figure
plt.YAxis2.SetSizeLimit(min: 40);
// save the output
plt.Title("Scatter Plot with DateTime Axis");
plt.SaveFig("../../../datetime-scatter.png");
此应用程序的源代码是在GitHub上提供
信号图
- 与散点图相比,信号图提供了巨大的性能提升
- 信号图计算X位置
sample rate
和offset
- 价值
sample rate
是每天的样本数:- 每日:
sampleRate = 1
- 每小时:
sampleRate = 24
- 分钟:
sampleRate = 24 * 60
- 第二:
sampleRate = 24 * 60 * 60
- 毫秒:
sampleRate = 24 * 60 * 60 * 1000
- 每日:
// generate sample data (array of values with a single starting DateTime)
int pointCount = 100;
Random rand = new Random(1);
double[] values = ScottPlot.DataGen.RandomWalk(rand, pointCount);
DateTime firstDay = new DateTime(2016, 06, 27);
double samplesPerDay = (24 * 60); // one sample per minute
// plot the double arrays using a traditional scatter plot
var plt = new ScottPlot.Plot(600, 400);
var sig = plt.AddSignal(values, sampleRate: samplesPerDay);
sig.OffsetX = firstDay.ToOADate();
// indicate the horizontal axis tick labels should display DateTime units
plt.XAxis.DateTimeFormat(true);
// add padding to the right to prevent long dates from flowing off the figure
plt.YAxis2.SetSizeLimit(min: 40);
// save the output
plt.Title("Signal Plot with DateTime Axis");
plt.SaveFig("../../../datetime-signal.png");
笔记
👉 ScottPlot Cookbook提供了额外的信息和代码示例,展示了先进的日期时间刻度标签功能
轴还有其他选项用于标记格式,包括为日期到字符串的转换定义格式字符串的功能,以及指示要使用的区域性的功能(例如,不同的区域性周期、连字符或破折号来分隔月份和年份)。