为 Oxyplot 热图使用日期时间轴
Use a DateTime axis for an Oxyplot HeatMap
我想为 Oxyplot 热图系列(在 winforms 中)的 Y 轴使用日期时间轴。 API 允许我将轴添加到 PlotModel,但并没有多大用处,因为 y 值是从双精度矩阵的整数列索引映射出来的 - y 值大约在 1 月 4 日出现。 1900.
如何在热图上使用时间作为 y 数据?
实现这种情况的解决方法并不难。设置图表时,创建 2 个轴:一个用于时间,另一个用于 HeatMapSeries 输入的积分索引。
DateTimeAxis dateTimeAxis;
HeatMapSeries series;
....
//set up the time axis for y
dateTimeAxis = new DateTimeAxis();
dateTimeAxis.Position = AxisPosition.Left;
dateTimeAxis.Key = "dateTimeAxis";
plotModel.Axes.Add(dateTimeAxis);
//set up a shadow axis for the HeatMapSeries
var linearAxis = new LinearAxis();
linearAxis.Position = AxisPosition.Left;
linearAxis.Key = "linearAxis";
plotModel.Axes.Add(linearAxis);
series.YAxisKey = linearAxis.Key;
接下来,必须隐藏指定的 y 轴 - 但在绘图更新之前我们无法访问 Y 轴 属性:
//hide the linear axis
plotModel.Updated += (sender, e) =>
{
series.YAxis.IsAxisVisible = false;
};
最后,在设置热图数据时,只需创建所需的从矩阵索引到时间的映射即可。然后调整 y 尺度。例如:
public void UpdateData(double[,] data)
{
series.Data = data;
//adjust date/time axis
int numOfMinutes = data.GetLength(1);
dateTimeAxis.Minimum = DateTimeAxis.ToDouble(DateTime.Now);
dateTimeAxis.Maximum DateTimeAxis.ToDouble(DateTime.Now.AddMinutes(numOfMinutes));
}
我还没有看到在 OxyPlot 中直接执行此操作的方法
我想为 Oxyplot 热图系列(在 winforms 中)的 Y 轴使用日期时间轴。 API 允许我将轴添加到 PlotModel,但并没有多大用处,因为 y 值是从双精度矩阵的整数列索引映射出来的 - y 值大约在 1 月 4 日出现。 1900.
如何在热图上使用时间作为 y 数据?
实现这种情况的解决方法并不难。设置图表时,创建 2 个轴:一个用于时间,另一个用于 HeatMapSeries 输入的积分索引。
DateTimeAxis dateTimeAxis;
HeatMapSeries series;
....
//set up the time axis for y
dateTimeAxis = new DateTimeAxis();
dateTimeAxis.Position = AxisPosition.Left;
dateTimeAxis.Key = "dateTimeAxis";
plotModel.Axes.Add(dateTimeAxis);
//set up a shadow axis for the HeatMapSeries
var linearAxis = new LinearAxis();
linearAxis.Position = AxisPosition.Left;
linearAxis.Key = "linearAxis";
plotModel.Axes.Add(linearAxis);
series.YAxisKey = linearAxis.Key;
接下来,必须隐藏指定的 y 轴 - 但在绘图更新之前我们无法访问 Y 轴 属性:
//hide the linear axis
plotModel.Updated += (sender, e) =>
{
series.YAxis.IsAxisVisible = false;
};
最后,在设置热图数据时,只需创建所需的从矩阵索引到时间的映射即可。然后调整 y 尺度。例如:
public void UpdateData(double[,] data)
{
series.Data = data;
//adjust date/time axis
int numOfMinutes = data.GetLength(1);
dateTimeAxis.Minimum = DateTimeAxis.ToDouble(DateTime.Now);
dateTimeAxis.Maximum DateTimeAxis.ToDouble(DateTime.Now.AddMinutes(numOfMinutes));
}
我还没有看到在 OxyPlot 中直接执行此操作的方法