如何为NPOI创建的条形图Y轴添加水平网格线
水平网格线添加方案
NPOI的IValueAxis接口内置了网格线配置能力,官方文档没有明确说明,网格线默认处于未启用状态,你可以在Y轴(值轴)初始化后添加以下代码启用水平网格线:
// 启用Y轴主网格线,对应条形图的水平网格线 if (yAxis.MajorGridlines == null) { yAxis.MajorGridlines = yAxis.CreateGridlines(); } yAxis.MajorGridlines.IsVisible = true; // 可选配置:调整网格线样式 // yAxis.MajorGridlines.LineProperties.SetSolidFill(Color.LightGray); // yAxis.MajorGridlines.LineProperties.Width = 1;
如果需要添加次要水平网格线,操作逻辑相同,替换MajorGridlines为MinorGridlines即可。
系列标题不显示修复方案
你当前调用的series.SetTitle()是设置单个系列的标题,该标题默认只会展示在图表图例中,没有创建图例的情况下不会显示。
如果需要显示系列标题,在调用chart.Plot()前添加创建图例的代码即可:
// 创建图表图例,所有系列的标题会展示在图例区域 chart.CreateLegend();
如果你是要设置整个图表的顶部通用标题,不要给单个系列设置,直接给图表对象赋值标题:
chart.TitleText = "Matches By World-Check Category";
完整修改后的代码参考
IDrawing drawing = sheet.CreateDrawingPatriarch(); IClientAnchor anchor = drawing.CreateAnchor(0, 0, 0, 0, 4, chartRow, 10, chartRow + 30); IChart chart = drawing.CreateChart(anchor); IBarChartData<string, double> data = chart.ChartDataFactory.CreateBarChartData<string, double>(); IChartAxis xAxis = chart.ChartAxisFactory.CreateCategoryAxis(AxisPosition.Bottom); xAxis.MajorTickMark = AxisTickMark.None; xAxis.MinorTickMark = AxisTickMark.None; IValueAxis yAxis = chart.ChartAxisFactory.CreateValueAxis(AxisPosition.Left); yAxis.MajorTickMark = AxisTickMark.Cross; yAxis.MinorTickMark = AxisTickMark.None; yAxis.Crosses = AxisCrosses.AutoZero; yAxis.SetCrossBetween(AxisCrossBetween.Between); // 新增:启用水平网格线 if (yAxis.MajorGridlines == null) { yAxis.MajorGridlines = yAxis.CreateGridlines(); } yAxis.MajorGridlines.IsVisible = true; IChartDataSource<string> xSource = DataSources.FromStringCellRange(sheet, new CellRangeAddress(chartRow + 1, lastRow, 0, 0)); IChartDataSource<double> ySource = DataSources.FromNumericCellRange(sheet, new CellRangeAddress(chartRow + 1, lastRow, 1, 1)); IBarChartSeries<string, double> series = data.AddSeries(xSource, ySource); series.SetTitle("Matches By World-Check Category"); // 新增:创建图例显示系列标题,或者直接设置图表标题 chart.CreateLegend(); // 若需要图表整体标题用下方代码代替创建图例 // chart.TitleText = "Matches By World-Check Category"; chart.Plot(data, xAxis, yAxis);
内容的提问来源于stack exchange,提问作者Disco Globeulon
相关产品推荐
相关产品推荐

