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

fl_chart是否支持时间序列图?如何正确展示时序数据?

问题解答

1. fl_chart是否支持时间序列图?

fl_chart没有提供直接的时间序列图表组件,但可以通过自定义坐标轴标签和数据转换来实现时间序列展示效果。

2. 改造LineChart实现时间序列图的方案

核心思路是:

  • 将DateTime转换为连续的数值(比如时间戳的毫秒数)作为FlSpot的x轴值,保证时间间隔的准确性;
  • 自定义底部坐标轴的标签生成器,将数值转换回可读的日期字符串。

修改后的完整代码如下:

import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart';

class FlChartExample extends StatelessWidget {
  FlChartExample({Key? key}) : super(key: key);

  List<SalesDataPair> sales = [
    SalesDataPair(DateTime(2017, 9, 20), 25),
    SalesDataPair(DateTime(2017, 9, 24), 50),
    SalesDataPair(DateTime(2017, 10, 3), 100),
    SalesDataPair(DateTime(2017, 10, 11), 75),
  ];

  @override
  Widget build(BuildContext context) {
    // 将DateTime转换为时间戳作为x轴值,保证时间间隔正确
    final List<FlSpot> timeSeriesSpots = sales.map((data) {
      return FlSpot(data.date.millisecondsSinceEpoch.toDouble(), data.amount);
    }).toList();

    return Scaffold(
      body: SafeArea(
        child: Container(
          padding: const EdgeInsets.all(20),
          width: double.infinity,
          child: LineChart(
            LineChartData(
              borderData: FlBorderData(show: false),
              // 自定义底部坐标轴标签
              titlesData: FlTitlesData(
                bottomTitles: AxisTitles(
                  sideTitles: SideTitles(
                    showTitles: true,
                    reservedSize: 30,
                    // 生成日期标签
                    getTitlesWidget: (value, meta) {
                      final date = DateTime.fromMillisecondsSinceEpoch(value.toInt());
                      return Text(
                        "${date.month}/${date.day}",
                        style: const TextStyle(fontSize: 12),
                      );
                    },
                  ),
                ),
                leftTitles: AxisTitles(sideTitles: SideTitles(showTitles: true)),
                topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)),
                rightTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)),
              ),
              lineBarsData: [
                LineChartBarData(
                  spots: timeSeriesSpots,
                  isCurved: false,
                  barWidth: 3,
                  color: Colors.red,
                  dotData: FlDotData(show: true),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

class SalesDataPair {
  SalesDataPair(this.date, this.amount);
  final DateTime date;
  final double amount;
}

3. 其他可实现时间序列图的Flutter包

除了syncfusion_flutter_charts和charts_flutter,还有这些选择:

  • flutter_echarts:基于ECharts封装,原生支持时间序列图表,配置灵活,适合复杂可视化需求;
  • chart_sparkline:轻量级组件,专注于简洁的折线/火花图,适合展示简单的时间序列趋势;
  • graphx:自定义绘图框架,自由度极高,可以完全自定义时间序列图表的样式和交互;
  • fl_chart:即你当前使用的包,通过上述改造方案即可实现时间序列效果,无需额外引入依赖。

内容的提问来源于stack exchange,提问作者mmj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:25:16