使用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
相关产品推荐
相关产品推荐

