Chart.js 时间序列跳过几天

2024-03-09

我有一个非常简单的条形图,其中每个数据点由日期(天)和数字组成。也许唯一的特点是并非涵盖每个日期(即有些日子没有数据点)。

绘制图表时,仅显示那些具有与其关联的数据点的日期。所有其他日期都被简单地省略。因此 x 轴分布不均匀并且会跳过值。

如何确保 X 轴真正呈线性且不会遗漏任何日期?

PS:这就是我的图表的定义方式:

chartData.datasets[0].data.push( {t: new Date('2019-02-01'), y: value});
// And so on...

var chart = new Chart(ctx, {
        type: 'bar',
        data: chartData,
        options: {
            annotation: {
                annotations: []
            },
            legend: {
                display: false
             },
            scales: {
                xAxes: [{
                    type: 'time',
                    unitStepSize: 1,
                    distribution: 'series',
                    time: {
                        unit: 'day'
                    },
                }]
            }
        }
    });

这是此问题的有效解决方案,适用于新版本的 Chart.jsv3.x

Chart.jsv3.2.1(不向后兼容v2.xx)

const ctx = document.getElementById('timeSeriesChart').getContext('2d');

const chartData = [
  {x:'2019-01-08', y: 4},
  {x:'2019-01-13', y: 28},
  {x:'2019-01-14', y: 8},
  {x:'2019-01-15', y: 18},
  {x:'2019-01-16', y: 68},
  {x:'2019-01-18', y: 48},
  {x:'2019-01-19', y: 105},
  {x:'2019-01-21', y: 72},
  {x:'2019-01-23', y: 36},
  {x:'2019-01-24', y: 48},
  {x:'2019-01-25', y: 17},
  {x:'2019-01-28', y: 30},
  {x:'2019-01-29', y: 28},
  {x:'2019-01-30', y: 25},
  {x:'2019-01-31', y: 18},
  {x:'2019-02-04', y: 25},
  {x:'2019-02-05', y: 22},
  {x:'2019-02-06', y: 17},
  {x:'2019-02-07', y: 15}
];

const chart = new Chart(ctx, {
  type: 'bar',
  data: {
  datasets: [{
    data: chartData,
    backgroundColor: 'rgb(189,0,53)'
    }]
  },
  options: {
    plugins: {  
      legend: {  //watch out: new syntax in v3.2.0, `legend` within `plugins`
        display: false
      },
      title: {   //watch out: new syntax in v3.2.0, `title` within `plugins`
        display: false
      }
    },
    scales: {
      x: {  //watch out: new syntax in v3.2.0 for xAxis
        type: 'timeseries', // `time`  vs `timeseries` later in images
        time: {
          unit: 'day'
        },
        ticks: { // Edit: added this to avoid overlapping - thanks for comment
          minRotation: 85, // <-- just try any number
          maxRotation: 90  // <-- just try any number
        }
      }
    }
  }
});
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
  <!-- gets you latest version of Chart.js (now at v3.2.1) --> 

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment"></script>
  <!-- for x-Axis type 'time' or 'timeseries' to work, you need additional libraries --> 
  <!-- (like moment.js and its adapter) --> 

<div>
    <canvas id="timeSeriesChart"></canvas>
</div>

Time笛卡尔轴

x: {
     type: 'time'

按照您的要求使 x 轴“线性”,仍然显示没有数据的天数

Source: https://www.chartjs.org/docs/latest/axes/cartesian/time.html https://www.chartjs.org/docs/latest/axes/cartesian/time.html

时间序列 Axis

x: {
     type: 'timeseries'

使数据点等距并相应地调整 x 轴以使条形显示均匀分布

Source: https://www.chartjs.org/docs/latest/axes/cartesian/timeseries.html https://www.chartjs.org/docs/latest/axes/cartesian/timeseries.html

Edit: following avoiding overlapping of x-Axis ticks in reply to comment: timeseries without overlapping x-Axis ticks

到目前为止显示类型之间的差异time and timeseries

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chart.js 时间序列跳过几天 的相关文章

随机推荐

  • 如何在iOS中制作一个水平可滚动的UITabBar?

    我的应用程序中的 UITabBar 由 10 多个项目组成 但宽度足以放置所有 10 多个项目 如何在 iOS 中制作水平可滚动的 UITabBar Thanks 至少在某种程度上 你必须自己动手 What might工作 将创建一个 UI
  • mapM 的惰性版本

    假设我在使用 IO 时收到了大量的项目列表 as lt getLargeList 现在我正在尝试申请fn a gt IO b onto as as lt getLargeList bs lt mapM fn as mapM有类型mapM M
  • 大查询将重复字段中的结构更新为 null

    在 Google bigquery 中 我试图对重复字段进行更新 为了进行比较 这是可行的 或者至少被标记为有效 但当然实际上并没有更新该字段 UPDATE my table t SET my field ARRAY SELECT AS S
  • anaconda 在 Windows 上安装 python 3.4

    我想使用 Anaconda 安装和使用 python 3 4 及其众多库 例如 numpy pandas 等 不幸的是 我无法激活 python 3 4 我在 Windows 8 笔记本上安装了 Acaconda 2 0 Anaconda
  • debezium 无法使用带有默认插件 pgoutput 的 postgres 11 访问文件“decoderbufs”

    我是 kafka 新手 我正在尝试使用 debezium postgres 连接器 但即使使用带有标准插件的 postgres 版本 11 我也会收到此错误 org apache kafka connect errors ConnectEx
  • 使用 Django 在 teamcity 中测试覆盖率

    我已经让 teamcity 工作了 它构建并运行了一个自定义测试运行程序 http pypi python org pypi teamcity messages http pypi python org pypi teamcity mess
  • 选择列值已更改的行

    假设我有下表 Value Time 0 15 06 2012 8 03 43 PM 1 15 06 2012 8 03 43 PM 1 15 06 2012 8 03 48 PM 1 15 06 2012 8 03 53 PM 1 15 0
  • 为什么这些 Tomcat 服务器的 JVM 每小时执行一次 Full GC?

    我们运行许多 Tomcat 服务器 并观察到完整的垃圾收集 GC 通常每小时执行一次 特别是当内存使用率相对较低时 精确时间似乎与应用程序服务器启动的时间有关 如果服务器在 01 13 启动 则在 02 13 完成一次 Full GC 下一
  • 如何插入只有默认值的记录?

    如果我有一个包含所有默认列的 SQL 表 例如 标识列 任意数量的所有列都具有默认值 那么插入没有给出显式值的行的 SQL 语句是什么 insert MyTable doh no fields values doh no values 有什
  • 通过嵌入式服务器测试 Solr

    我正在为我的 solr indexer 应用程序编写一些测试 遵循测试最佳实践 我想编写独立的代码 只需加载schema xml and solrconfig xml并为索引搜索测试创建临时数据树 由于应用程序大部分是用java编写的 我正
  • 通过REST API查询HealthKit数据

    是否可以像查询常规 API 经用户同意 一样从 Healthkit 获取数据并将其存储在我的 web 应用程序中 就像是 healthkit com api v1 user GetWeight 如果是 我在哪里可以找到可用方法的列表 如果没
  • D3.js:使用鼠标滚轮滚动缩放 x 轴和数据

    我搜索了其他相关问题 但无论是因为我是 D3 新手 还是作为一名编码员生疏 我无法弄清楚这一点 我有一个图表 我希望能够通过仅在 a 轴和数据上滚动鼠标滚轮来放大 现在 我的整个图表在鼠标滚轮的滚动上进行缩放 而不是仅在 x 轴上进行缩放
  • 使用异步控制器的强类型 RedirectToAction (Futures)

    有了这个代码 它给了我一个警告 Because this call is not awaited execution of the current method continues before the call is completed
  • 如何实现自定义“fmt::Debug”特征?

    我想你会做这样的事情 extern crate uuid use uuid Uuid use std fmt Formatter use std fmt Debug derive Debug struct BlahLF id Uuid im
  • Spring 的 Joda Time 日期时间格式无效

    我有一个项目已经使用 Jackson Hibernate4Module 进行对象映射 现在 我想在项目中使用 Joda Time 并添加了 joda time joda time hibernate jackson datatype jod
  • 无法在 iTunes Connect 中上传我的应用程序的屏幕截图 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 由于更新 我尝试更改应用程序的屏幕截图 但苹果给了我错误 发生网络超时错误 请稍后再试 有什么帮助吗 请将浏览器切换到其他浏览器 然后是
  • Android Studio 键盘快捷键控制

    谁能给我一些 Android Studio 键盘快捷键所有控件的建议或链接 Move to File gt Settings gt Keymap并改变Keymaps设置到eclipse 这样就可以像在eclipse中一样使用快捷键了
  • Mathematica“AppendTo”函数问题

    我是 Mathematica 的新手 在向数据表添加列时遇到了重大故障 我在 Vista 中运行 Mathematica 7 我在RFD上花了很多时间才来这里问 我有一个包含三列五行的数据表 mydata 我正在尝试将两个包含五个元素的列表
  • 数组切片返回 [object Object] 而不是值

    我试图获取特定 div 被删除时的位置 在一些帮助下 我整理了下面的代码 我在最后一点添加了尝试获取特定值 但它只是返回 object Object 而不是 0 0 或 0 120 之类的东西 那么问题是如何从数组中获取实际值 Here h
  • Chart.js 时间序列跳过几天

    我有一个非常简单的条形图 其中每个数据点由日期 天 和数字组成 也许唯一的特点是并非涵盖每个日期 即有些日子没有数据点 绘制图表时 仅显示那些具有与其关联的数据点的日期 所有其他日期都被简单地省略 因此 x 轴分布不均匀并且会跳过值 如何确