为 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 中直接执行此操作的方法