求助:Syncfusion SfCartesianChart Y轴首尾主网格线颜色不一致
问题:Syncfusion SfCartesianChart Y轴首尾主网格线颜色不一致
使用Syncfusion的SfCartesianChart组件时,功能运行正常,但Y轴对应6AM和8PM刻度的首尾两条主网格线颜色与其他网格线存在差异。期望所有网格线颜色完全统一,已将plotAreaBorderWidth设为0,问题仍未解决。

当前代码:
SfCartesianChart( enableAxisAnimation: true, plotAreaBorderWidth: 0, primaryXAxis: CategoryAxis( name: 'Day', axisLabelFormatter: (value) { final attendanceData = chartData.firstWhere( (element) => element.startDate.weekday == DateTime.parse(value.text).weekday, ); return ChartAxisLabel( // Format: MON, TUE, WED, THU, FRI, SAT, SUN DateFormat.E().format(DateTime.parse(value.text)).toUpperCase(), context.textStyles.labelTiny.copyWith( color: attendanceData.isAbsent ? AppColors.instance.accentRed : AppColors.instance.primaryText, ), ); }, majorGridLines: MajorGridLines(width: 0), majorTickLines: MajorTickLines(size: 8, color: Colors.transparent), axisLine: AxisLine( width: 0, color: AppColors.instance.darkGrey, ), ), primaryYAxis: NumericAxis( name: 'Time', rangePadding: ChartRangePadding.additional, axisLabelFormatter: (value) { final hour = DateTime(2021, 1, 1, int.parse(value.text)); return ChartAxisLabel( // Format: 8AM without 0s DateFormat('ha').format(hour), context.textStyles.labelTiny.secondary, ); }, axisLine: AxisLine(width: 0, color: Colors.transparent), majorTickLines: MajorTickLines(size: 0), majorGridLines: MajorGridLines( width: 1, color: AppColors.instance.darkGrey, dashArray: <double>[5, 5], ), interval: 2, ), series: <RangeColumnSeries>[ RangeColumnSeries<AttendanceChartData, DateTime>( dataSource: chartData, xValueMapper: (AttendanceChartData data, _) => data.startDate, lowValueMapper: (AttendanceChartData data, _) { if (data.isAbsent) { return null; } return data.startDate.hour + data.startDate.minute / 60; }, highValueMapper: (AttendanceChartData data, _) { if (data.isAbsent) { return null; } return data.endDate.hour + data.endDate.minute / 60; }, pointColorMapper: (AttendanceChartData data, _) { if (data.isAbsent) { return Colors.transparent; } else if (data.isEarlyLeaveOrLateEntry) { return AppColors.instance.accentOrange; } else { return AppColors.instance.lightModeGreen; } }, onCreateRenderer: (series) { return CustomSmoothBorderRangeRenderer(); }, ), ], )
解决方案
隐藏图表区域边框
你仅设置了plotAreaBorderWidth: 0,但整个图表的chartAreaBorder可能仍保留默认边框,导致首尾网格线与边框重叠,视觉上颜色加深。在SfCartesianChart中添加chartAreaBorderWidth: 0:SfCartesianChart( enableAxisAnimation: true, plotAreaBorderWidth: 0, chartAreaBorderWidth: 0, // 添加此行隐藏图表区域边框 // 其他属性... )调整Y轴范围padding
当前Y轴使用rangePadding: ChartRangePadding.additional会自动扩展轴范围,导致首尾网格线贴近图表边缘。可改为ChartRangePadding.none,或手动指定minimum和maximum精确控制范围:primaryYAxis: NumericAxis( name: 'Time', rangePadding: ChartRangePadding.none, // 取消自动扩展padding minimum: 6, // 对应6AM刻度 maximum: 20, // 对应8PM刻度 // 其他属性... )验证网格线样式统一性
确认AppColors.instance.darkGrey为单一纯色,无透明度或渐变设置;同时检查majorGridLines的宽度、虚线配置未存在条件性变更,确保所有网格线样式完全一致。
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

