【发布时间】:2021-01-16 12:07:34
【问题描述】:
我正在使用堆叠的时间序列折线图比较当前年份的 30 天历史销售额与用户选择的任何其他年份。
图表在工作时是这样的:
从服务器完成两次获取:
- 当前年的选定日期始终为 30 天的列表。
- 第二个列表在选定年份的选定日期有 30 天。
返回的数据,如下两个列表:
static List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
final currentYear = [
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 15), sales: 600000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 14), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 13), sales: 450000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 12), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 10), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 11), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 12), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 10), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 09), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 08), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 07), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 06), sales: 400000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 05), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 04), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 03), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 02), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2020, 01, 01), sales: 200000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 31), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 30), sales: 600000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 29), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 28), sales: 400000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 27), sales: 600000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 26), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 25), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 24), sales: 600000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 23), sales: 800000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 22), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 21), sales: 800000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 20), sales: 900000),
TimeSeriesSales(timeCurrent: DateTime(2019, 12, 19), sales: 900000),
];
final selectedYear = [
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 15), sales: 600000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 14), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 13), sales: 450000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 12), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 10), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 11), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 12), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 10), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 09), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 08), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 07), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 06), sales: 400000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 05), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 04), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 03), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 02), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2019, 01, 01), sales: 200000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 31), sales: 500000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 30), sales: 600000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 29), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 28), sales: 400000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 27), sales: 600000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 26), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 25), sales: 300000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 24), sales: 600000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 23), sales: 800000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 22), sales: 700000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 21), sales: 800000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 20), sales: 900000),
TimeSeriesSales(timeCurrent: DateTime(2018, 12, 19), sales: 900000),
];
List<charts.Series<SalesChartObjects, DateTime>> sales = [
charts.Series(
id: "Last Year",
data: salesChartService.chartObjectsPreviousYear,
domainFn: (SalesChartObjects data, _) => data.dt,
measureFn: (SalesChartObjects data, _) => data.amount,
labelAccessorFn: (SalesChartObjects data, _) => data.amount.toString(),
colorFn: (_, __) => charts.MaterialPalette.gray.shadeDefault),
charts.Series(
id: "This Year",
data: salesChartService.chartObjectsCurrentYear,
domainFn: (SalesChartObjects data, _) => data.dt,
measureFn: (SalesChartObjects data, _) => data.amount,
labelAccessorFn: (SalesChartObjects data, _) => data.amount.toString(),
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault),
];
我用这种方式遇到的问题是:
如果两个列表中的年份不同,我接受时间线图表不会将两个图层放在一起。因此,我目前正在将返回的 2019 年替换为当前年份,因此它可以按日期和月份将它们很好地相互映射,以查看它在第一张图像中的方式。
但是当我用当前年份替换年份的列表包含超过两年的数据时,例如 15/12/2019 - 15/01/2020,我也将 2019 替换为 2020,这会弄乱整个偏离路线,将 2019 年 12 月的数据放在当年的 12 月,看起来像这样????
我正在寻找进行这种比较的正确方法,但我感到非常困惑。是否有制作销售/日期比较图表的标准方法?
我可以单独使用折线图,但是如何在域轴“26/08/2020”上显示日期,因为它只接受整数?任何建议将不胜感激。
【问题讨论】: