You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Oxyplot绘制Candlestick图表时出现空白问题求助

解决OxyPlot Candlestick图表空白的问题

我来帮你排查这个Candlestick图表显示空白的问题,结合你贴的代码,几个常见的问题点可以逐一检查:

1. 数据绑定字段不匹配(最可能的原因)

你代码里给CandleStickSeries设置了DataFieldX = "Time",但OxyPlot内置的HighLowItem类(也就是HighLowItemGenerator.MRProcess返回的对象)的X轴属性是X而不是Time!字段名不匹配会导致数据无法正确绑定,自然显示空白。

修改这一行即可:

var series = new CandleStickSeries { 
    Color = OxyColors.Black, 
    IncreasingColor = OxyColors.DarkGreen, 
    DecreasingColor = OxyColors.Red, 
    DataFieldX = "X", // 把"Time"改成"X"
    DataFieldHigh = "H", 
    DataFieldLow = "L", 
    DataFieldOpen = "O", 
    DataFieldClose = "C", 
    TrackerFormatString = "High: {2:0.00}\nLow: {3:0.00}\nOpen: {4:0.00}\nClose: {5:0.00}", 
    ItemsSource = items 
};

2. 手动设置的坐标轴范围可能有问题

你手动指定了X轴和Y轴的范围,如果计算的范围和实际数据不匹配(比如范围区间内没有数据,或者Min/Max值设置错误),也会导致图表空白。可以先注释掉这些代码,让OxyPlot自动计算坐标轴范围,验证是否能显示:

// 暂时注释掉手动范围设置
// timeSpanAxis1.Minimum = items[n - 200].X;
// timeSpanAxis1.Maximum = items[n - 130].X;
// linearAxis1.Minimum = items.Skip(n - 200).Take(70).Select(x => x.Low).Min();
// linearAxis1.Maximum = items.Skip(n - 200).Take(70).Select(x => x.High).Max();

如果注释后图表能显示,说明之前的范围计算逻辑有问题,需要重新检查区间内的数据是否有效。

3. 强制触发PlotView渲染

有时候控件初始化和Model赋值的时机不对,可能不会自动触发渲染。可以在赋值Model后手动调用刷新:

plotView1.Model = plotModel1;
plotView1.InvalidatePlot(true); // 强制刷新图表

4. 验证数据有效性

确认items数组里的实际数据是有效的,可以打印几个样本值检查:

// 输出前几个和后几个数据,确认数值正常
Console.WriteLine($"第一个数据点:X={items[0].X}, 最高价={items[0].High}, 最低价={items[0].Low}");
Console.WriteLine($"最后一个数据点:X={items[^1].X}, 最高价={items[^1].High}, 最低价={items[^1].Low}");

如果数据全部为0或者DateTime值无效,也会导致图表空白。

先试试修改DataFieldX的字段名,这是最常见的触发原因,应该能解决大部分情况。

内容的提问来源于stack exchange,提问作者Pablo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:57:33