ChartJS 显示时间数据的差距

2023-11-24

我有这个图表:

Chart

这是用 ChartJS 构建的,但是,在下午 1 点到 5:30 之间,没有数据。

我想要图表做的就是显示没有数据,而不是连接两个点。

这可以做到吗?理论上,我每 5 秒就有一个新值,但这可能会减少,所以我想我需要能够设置连接间隙与显示间隙的容差?

图表选项如下所示:

        myChart = new Chart(ctx, 
        {
            type: 'line',
            data: 
            {
                labels: timestamp,
                datasets: 
                [{data: speed,backgroundColor: ['rgba(0, 9, 132, 0.2)'],borderColor: ['rgba(0, 0, 192, 1)'],borderWidth: 1},
                {data: target,borderColor: "rgba(255,0,0,1)",backgroundColor: "rgba(255,0,0,0)",borderWidth: 1,tooltips: {enabled: false}}]
            },
            options: 
            {
                scales: {yAxes: [{ticks: {beginAtZero:true, min: 0, max: 300}}], xAxes: [{type: 'time',}]},
                elements: 
                {point:{radius: 0,hitRadius: 5,hoverRadius: 5},
                line:{tension: 0}},
                legend: {display: false},
                pan: {enabled: true,mode: 'xy',rangeMin: {x: null,y: null},rangeMax: {x: null,y: null}},
                zoom: {enabled: true,drag: true,mode: 'xy',rangeMin: {x: null,y: null},rangeMax: {x: null,y: null}},

            }
        });

提前致谢


Using spanGaps您可以控制没有或空数据的点之间折线图的行为:

var timestamp = [],
  speed = [10, 100, 20, 30, 40, null, null, null, 100, 40, 60],
  target = [20, 30, 40, 10, null, null, null, null, 200, 60, 90];
for (var k = 10; k--; k > 0) {
  timestamp.push(new Date().getTime() - 60 * 60 * 1000 * k);
}
var ctx = document.getElementById('chart').getContext("2d");
var data = {
  labels: timestamp,
  datasets: [{
      data: speed,
      backgroundColor: ['rgba(0, 9, 132, 0.2)'],
      borderColor: ['rgba(0, 0, 192, 1)'],
      borderWidth: 1,
      spanGaps: false,
    },
    {
      data: target,
      borderColor: "rgba(255,0,0,1)",
      backgroundColor: "rgba(255,0,0,0)",
      borderWidth: 1,
      spanGaps: false,
      tooltips: {
        enabled: false
      }
    }
  ]
};
var options = {
  scales: {
    yAxes: [{
      ticks: {
        beginAtZero: true,
        min: 0,
        max: 300
      }
    }],
    xAxes: [{
      type: 'time',
    }]
  },
  elements: {
    point: {
      radius: 0,
      hitRadius: 5,
      hoverRadius: 5
    },
    line: {
      tension: 0
    }
  },
  legend: {
    display: false
  },
  pan: {
    enabled: true,
    mode: 'xy',
    rangeMin: {
      x: null,
      y: null
    },
    rangeMax: {
      x: null,
      y: null
    }
  },
  zoom: {
    enabled: true,
    drag: true,
    mode: 'xy',
    rangeMin: {
      x: null,
      y: null
    },
    rangeMax: {
      x: null,
      y: null
    }
  },

};

var chart = new Chart(ctx, {
  type: 'line',
  data: data,
  options: options
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js"></script>
<canvas id="chart"></canvas>

作为替代方案,您可以修改数据数组并替换null with zero:

var timestamp = [],
    speed = [10, 100, 20, 30, 40, null, null, null, 100, 40, 60],
    target = [20, 30, 40, 10, null, null, null, null, 200, 60, 90];
for (var k = 10; k--; k>0) {
	timestamp.push(new Date().getTime()-60*60*1000*k);
}

function nullToZero(array) {
  return array.map(function(v) { 
    if (v==null) return 0; else return v;
  });
}

var ctx = document.getElementById('chart').getContext("2d");
var data = {
  labels: timestamp,
  datasets: [{
      data: nullToZero(speed),
      backgroundColor: ['rgba(0, 9, 132, 0.2)'],
      borderColor: ['rgba(0, 0, 192, 1)'],
      borderWidth: 1,
    },
    {
      data: nullToZero(target),
      borderColor: "rgba(255,0,0,1)",
      backgroundColor: "rgba(255,0,0,0)",
      borderWidth: 1,
      tooltips: {
        enabled: false
      }
    }
  ]
};
var options = {
  scales: {
    yAxes: [{
      ticks: {
        beginAtZero: true,
        min: 0,
        max: 300
      }
    }],
    xAxes: [{
      type: 'time',
    }]
  },
  elements: {
    point: {
      radius: 0,
      hitRadius: 5,
      hoverRadius: 5
    },
    line: {
      tension: 0
    }
  },
  legend: {
    display: false
  },
  pan: {
    enabled: true,
    mode: 'xy',
    rangeMin: {
      x: null,
      y: null
    },
    rangeMax: {
      x: null,
      y: null
    }
  },
  zoom: {
    enabled: true,
    drag: true,
    mode: 'xy',
    rangeMin: {
      x: null,
      y: null
    },
    rangeMax: {
      x: null,
      y: null
    }
  },

};

var chart = new Chart(ctx, {
  type: 'line',
  data: data,
  options: options
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js"></script>
<canvas id="chart"></canvas>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ChartJS 显示时间数据的差距 的相关文章

随机推荐

  • Android Firebase 云消息传递(FCM):subscribeToTopic 会自动重试吗?

    要在 Android 客户端中订阅主题 我们应该调用 FirebaseMessaging getInstance subscribeToTopic news 我想知道如果执行此指令时互联网连接不可用 会发生什么情况 当互联网连接可用时 谷歌
  • C# - 我应该使用静态数据库连接吗

    在我连接到 Orace 数据库的应用程序中 我总是创建一个新连接 打开它 执行 OracleCommands 最后关闭它 最近我认为实现静态连接会是一个更好的主意 假设我有一个可以从任何地方访问的静态连接 每次我需要连接到数据库时 我都可以
  • 生成给定范围之间的奇数随机数

    如何生成给定范围内的奇数随机数 例如 对于 1 到 6 之间的范围 随机数为 3 或 1 或 5 生成随机数的方法 Random No Min int Math Random Max Min 1 Refer 如何在Java中生成特定范围内的
  • Google Places API 类型功能..

  • 如何使用 PDO 在 MySQL 中存储 BIGINT?

    我知道这个问题在这里被问过不止一次 但我找不到解决方案 我们正在使用一个数据库 将 facebook id 存储为 BIGINT 20 create table users fb id bigint 20 NOT NULL user nam
  • 如何更新绘图表达树形图以同时具有标签和绘图内的值?

    目前 plotly express 树形图仅显示树形图中的标签 如何在标签旁边包含该值 这就是为什么我不喜欢 Express 它有太多限制 要进行这些更改 您必须以任何一种方式访问 跟踪 从我的角度来看 使用普通的绘图更好 代码更透明 话虽
  • 如何在 Delphi XE 应用程序中使用 CHM HTML 帮助文件?

    Delphi 如何在 Delphi XE 应用程序中使用 CHM HTML 帮助文件 http edn embarcadero com article 27842文章介绍了如何使用 CHM 文件 我执行了那里描述的所有步骤 Added co
  • 如何更改 Android WebView 中的 FontSize?

    如何手动更改网页视图的字体大小 例如当页面在 web 视图中加载时 字体大小约为 24pt 对于我的安卓屏幕来说太大了 我查看了 网络设置 但似乎两者不相关 Thanks 我终于找到了 WebSettings webSettings web
  • 反斜杠 - 正则表达式 - Javascript

    我想构建一个 JS 函数 将参数列表连接到有效路径 因为我无法确定路径的一部分是否带有斜杠 这是函数 concatPath function var path for var i 0 i lt arguments length i path
  • 使用 Pear Mail 发送邮件的 PHP 脚本有什么问题?

    我有这个脚本 require once Mail php from Stephen lt email protected gt Google apps domain to email protected subject Hi body Hi
  • API网关CORS问题

    因此 我通过 AWS Gateway 提供的基本设置启用了 CORS 然而 对于这个 API 我需要允许所有请求的控制源并允许凭据 这是它的样子 您可能已经猜到的问题是 CORS 不允许此设置 您不能使用 Origin 通配符并将凭据设置为
  • 如何从代码隐藏中清除所有表单字段?

    HTML 有一种输入按钮类型 可以一步将表单中的所有字段重置为其初始状态
  • 如何使用JPA删除连接表中的行

    我有以下模型 一篇文章可以有一些标签 并且一些文章上可以有一个标签 所以它是与 3 个表的多对多关系 ARTICLE ARTICLE TAG TAG 当我删除标签时 我想删除 TAG 中的标签 该标签与 ARTICLE TAG 中标记的文章
  • 删除 DialogFragment 的正确方法:dismiss() 或 transaction.remove()?

    由于以下原因 我仍然遇到问题DialogFragment用于我的主要活动 我目前正在使用此代码来删除它 FragmentTransaction transaction getFragmentManager beginTransaction
  • 如何在 python 中使用 imaplib 获取电子邮件正文?

    我想从 IMAP4 服务器获取整个邮件 在 python 文档中 如果发现这段代码有效 gt gt gt t data M fetch 1 RFC822 gt gt gt body data 0 1 我想知道我是否始终可以相信 data 0
  • 如何在 Java 5 中屏蔽密码?

    我正在尝试用 Java 屏蔽密码 Sun java 建议了一种屏蔽密码的方法 如下所示 屏蔽密码 它使用一种简单的方法来做到这一点 public void run stop true while stop System out print
  • 使用自定义 AuthorizeAttribute 生成返回 URL

    我有一个自定义授权属性 using System using System Web Mvc using System Web Routing AttributeUsage AttributeTargets Class AttributeTa
  • 预取示例?

    任何人都可以给出一个示例或使用示例的链接 builtin prefetch在 GCC 或一般的 asm 指令 prefetcht0 中获得显着的性能优势 特别是 我希望该示例满足以下标准 这是一个简单 小型 独立的示例 删除 builtin
  • 角度/打字稿中的顺序代码执行

    如何让我的代码按顺序运行 例如 如果我有一个从服务获取一些数据的 for 循环 我想要n 1迭代仅在之后运行nth迭代已完成 我希望循环后的代码仅在 for 循环完成所有交互后才执行 示例代码 someMethod for var i 0
  • ChartJS 显示时间数据的差距

    我有这个图表 这是用 ChartJS 构建的 但是 在下午 1 点到 5 30 之间 没有数据 我想要图表做的就是显示没有数据 而不是连接两个点 这可以做到吗 理论上 我每 5 秒就有一个新值 但这可能会减少 所以我想我需要能够设置连接间隙