我想使用datetimeaxis作为Oxyplot heatmapseries的Y轴(在winforms中)。 API允许我将轴添加到PlotModel,但是没有太大的好处,因为y值是从双精度矩阵的整数列索引映射的 - y值出现在1900年1月左右。
如何在热图上使用y数据的时间?
答案 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中直接执行此操作的方法