如何使用eCharts显示每日股票图表结合季度收入数据图表

How to use eCharts to display a daily stock chart combined with a quarterly revenue data chart

我有两个数据集,我想在 eCharts canvas 上显示为两个单独的折线图:

  1. 季度收入图表,以及
  2. 每日股价图表。

使用下面的代码,显示了两个折线图,但是由于数据集的数组长度不同,收入折线图被挤到了 canvas 的左侧,而股价图以全宽正确显示。此外,x 轴彼此不对齐,因为日期范围不完全重叠(季度数据开始早于价格数据,请参见下面的示例)。

第一个长数据集,包含 每日 股票价格,如下所示:

    var dailyStockprices = [123,124,125, ... etc] // array length 600
    var dailyDates = ["2019-01-02","2019-01-03","2019-01-04", ... etc] // array length 600

第二个非常短的数据集,包含 季度 收入,如下所示:

    var quarterlyRevenues = [123,124,125, ... etc]  // array length 20
    var quarterlyDates = ["2018-09-30","2018-12-31","2019-03-31", ... etc] // array length 20

eCharts 代码如下所示:

    var myChart = echarts.init(document.getElementById('mainchart1'));

    option = {
      xAxis: [{
        type: 'category',
        data: dailyDates
      }, {
        type: 'category',
        data: quarterlyDates
      }],
      yAxis: [{
        type: 'value'
      }, {
        type: 'value'
      }],
      series: [{
        data: dailyStockprices,
        type: 'line',
        yAxisIndex: 0
      }, {
        data: quarterlyRevenues,
        type: 'line',
        yAxisIndex: 1
      }]
    };
    myChart.setOption(option);

这是一个简化的 JSFiddle 示例:https://jsfiddle.net/frankmarks/szm1f20j/9/

如何在同一个 canvas 上正确显示两个折线图,即全宽,同时两个 x 轴对齐?

经过一番研究,我找到了解决方案,将轴类型设置为'time'而不是'category',它会自动对齐轴对齐并完全回答我的问题。

关于如何格式化数据的进一步解释在此处的 eCharts 文档中给出:https://ecomfe.github.io/echarts-doc/public/en/option.html#series.data

摘录:

当一个维度对应一个时间轴(类型为'time')时,取值可以为:

  • 一个时间戳,比如1484141700832,代表一个UTC时间。
  • 日期字符串,采用以下格式之一:仅 ISO 8601 的子集 包括(所有这些都被视为当地时间,除非时区是 specified, 与moment一致): only part of year/month/date/time 指定:'2012-03'、'2012-03-01'、 '2012-03-01 05', '2012-03-01 05:06'。由 "T" 或 space 分隔: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123'。
  • 指定时区:'2012-03-01T12:22:33Z','2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00'。
  • 其他日期字符串格式(所有这些 被视为当地时间): '2012', '2012-3-1', '2012/3/1', '2012/03/01', '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'。
  • a JavaScript 用户创建的日期实例:注意, 使用数据字符串创建 Date 实例时,应考虑浏览器的差异和不一致。

例如:在 chrome 中,new Date('2012-01-01') 在 UTC 中被视为 2012 年 1 月 1 日,而 new Date('2012-1-1') 和 new Date('2012/01/01') 在当地时区被视为 2012 年 1 月 1 日。在 safari 中不支持新日期('2012-1-1')。

所以如果你打算执行new Date(dateString),强烈建议使用时间解析库(如moment),或者使用echarts.number.parseDate.