使用DateTime轴作为Oxyplot HeatMap

时间:2016-09-16 22:54:25

标签: c# winforms heatmap oxyplot

我想使用datetimeaxis作为Oxyplot heatmapseries的Y轴(在winforms中)。 API允许我将轴添加到PlotModel,但是没有太大的好处,因为y值是从双精度矩阵的整数列索引映射的 - y值出现在1900年1月左右。

如何在热图上使用y数据的时间?

1 个答案:

答案 0 :(得分:1)

实现这一目标的解决方法并不太难。设置图表时,创建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轴 - 但是我们无法访问YAxis属性,直到图更新为止:

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