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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:09:03