如何使用OxyPlot结合SkiaSharp绘制垂直柱状图
解决OxyPlot BarSeries绘制垂直柱状图的问题
问题原因
你遇到的异常是因为BarSeries默认使用水平方向(Horizontal),此时它要求Y轴必须是CategoryAxis。直接交换轴的Position但没修改BarSeries的方向,就会导致OxyPlot找不到符合要求的轴,抛出异常。另外旧版的ColumnSeries确实已被移除,现在统一用BarSeries通过设置Orientation来切换水平/垂直样式。
解决方案
修改代码时需要同时完成两个关键操作:
- 调整坐标轴的位置:将CategoryAxis移到X轴(Bottom),LinearAxis移到Y轴(Left)
- 给每个BarSeries设置
Orientation = BarSeriesOrientation.Vertical
修改后的完整代码
var model = new PlotModel(); // 分类轴放到底部(X轴) var categoryAxis = new CategoryAxis { Position = AxisPosition.Bottom }; // 数值轴放到左侧(Y轴) var valueAxis1 = new LinearAxis { Title = "Value Axis 1", Position = AxisPosition.Left, MinimumPadding = 0.06, MaximumPadding = 0.06, ExtraGridlines = new[] {0d}, Key = "y1" }; model.Axes.Add(categoryAxis); model.Axes.Add(valueAxis1); var series = new List<BarSeries> { new BarSeries { Orientation = BarSeriesOrientation.Vertical }, new BarSeries { Orientation = BarSeriesOrientation.Vertical }, }; var rnd = new Random(1); foreach (var s in series) { for (var i = 0; i < 4; i++) s.Items.Add(new BarItem() { Value = rnd.Next(0, 100) }); model.Series.Add(s); }
关键说明
BarSeriesOrientation.Vertical:告诉OxyPlot将柱状图垂直绘制,此时它会自动寻找X轴上的CategoryAxis,与我们调整后的轴位置匹配- 轴的Key可以根据需要修改(示例中把原来的"x1"改成"y1"更符合语义,不是必须项)
内容的提问来源于stack exchange,提问作者CiniMod
相关产品推荐
相关产品推荐

