Fl Chart双Y轴独立配置:左右标题刻度如何分开设置?
Fl Chart实现左右Y轴刻度独立的方案
Fl Chart原生默认共享Y轴的minY/maxY范围,无法直接让左右两侧刻度轴独立。要实现你要的效果,需要用双图表叠加的思路,具体步骤如下:
- 准备两个同类型的图表(比如LineChart),分别对应左侧和右侧Y轴
- 第一个图表配置左侧Y轴的minY、maxY,同时隐藏右侧轴
- 第二个图表配置右侧Y轴的minY、maxY,隐藏左侧轴,并且将对应数据的Y值按右侧轴范围做比例转换,保证曲线位置匹配
- 用Stack组件将两个图表叠在一起,视觉上就呈现出左右轴独立的效果
示例代码:
Stack( children: [ // 左侧轴对应图表 LineChart( LineChartData( minY: 0, maxY: 100, // 左侧轴独立范围 gridData: FlGridData(show: false), borderData: FlBorderData(show: false), titlesData: FlTitlesData( leftTitles: AxisTitles( sideTitles: SideTitles( showTitles: true, getTitlesWidget: (value, meta) => Text('${value.toInt()}'), ), ), rightTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), bottomTitles: AxisTitles( sideTitles: SideTitles( showTitles: true, getTitlesWidget: (value, meta) => Text('${value.toInt()}'), ), ), topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), ), lineBarsData: [ LineChartBarData( spots: [FlSpot(0, 20), FlSpot(1, 50), FlSpot(2, 80)], isCurved: true, color: Colors.blue, ), ], ), ), // 右侧轴对应图表 LineChart( LineChartData( minY: 0, maxY: 10, // 右侧轴独立范围 gridData: FlGridData(show: false), borderData: FlBorderData(show: false), titlesData: FlTitlesData( leftTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), rightTitles: AxisTitles( sideTitles: SideTitles( showTitles: true, getTitlesWidget: (value, meta) => Text('${value.toInt()}'), ), ), bottomTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), ), lineBarsData: [ LineChartBarData( spots: [FlSpot(0, 2), FlSpot(1, 5), FlSpot(2, 8)], isCurved: true, color: Colors.red, ), ], ), ), ], )
注意:右侧图表的Y轴数据需要根据左右轴的范围比例进行转换,比如左侧轴范围0-100,右侧轴0-10,那么左侧的20对应右侧的2,以此类推,确保两条曲线在X轴对齐的前提下,Y轴位置符合各自刻度逻辑。
内容的提问来源于stack exchange,提问作者Rapkat Baudunov
相关产品推荐
相关产品推荐

