当前位置: 首页 > 知识库问答 >
问题:

在图表JS中使用多个日期轴

孔鸿云
2023-03-14

我正在尝试设置一个包含2个数据集的图表,1个数据集作为一条线,将显示一个月的中位数,1个数据集作为散点图,显示某一天的值。每日日期不需要显示在 x 轴上。

我在应用程序的其他地方使用dayjs作为我的时间格式库,所以我尝试使用chartjs-adapter-dayjs-3库。

我很高兴自己管理x, y对象的数据构造。

我已经建立了一个代码笔,显示我认为应该工作的内容,但我现在只得到一个空白的图表,所以我显然做错了什么。

import dayjs from "https://cdn.skypack.dev/dayjs@1.10.7";
import * as chartjsAdapterDayjs from "https://cdn.skypack.dev/chartjs-adapter-dayjs@1.0.0";


const ctx = document.getElementById("myChart");
const today = dayjs()

const myChart = new Chart(ctx, {
  data: {
    datasets: [
      {
        label: "Median Sales",
        data: [
          {x: today, y: 10},
          {x: today.add(1, 'month'), y: 20}, 
          {x: today.add(2, 'month') , y: 15}
        ],
        type: "line",
        xAxisID: 'x1'
      },
      {
          label: 'Individual Sales Prices',
          data: [{x: today, y: 8}],
          type: 'scatter',
          xAxisID: 'x2'
        }
    ]
  },
  options: {
    scales: {
      x1: {
        type: 'time',
        time: {
           unit: 'month'
        }
      },
      x2: {
        type: 'time',
        time: {
           unit: 'day'
        }
      }
    }
  }
});

我发现目前还不清楚基于时间的数据和轴应该如何工作,因此任何帮助都将不胜感激。

所需布局

共有1个答案

洪国兴
2023-03-14

你遇到的问题是因为两件事。第一件事是,您没有使用您所使用的日期适配器。您正在使用另一个,并使用skypack导入它,这也有导入图表的巨大副作用。js本身。图表的版本。skypack导入的js是版本2。

你正在链接的库似乎没有一个版本可以在你的浏览器中工作,即使是使用脚本标签的例子。因此,如果您想使用day.js,您需要编写自己的日期适配器。

使用js日期和日期fns日期适配器的示例:

let start = new Date(),
  end = new Date();
start.setDate(start.getDate() - 7); // set to 'now' minus 7 days.
start.setHours(0, 0, 0, 0); // set to midnight.

new Chart(document.getElementById("lastSevenDaysOverview"), {
  type: "line",
  data: {
    datasets: [{
        label: 'Dataset 1',
        data: [{
          x: new Date('10-16-2021'),
          y: 1
        }, {
          x: new Date('10-18-2021'),
          y: 4
        }, {
          x: new Date('10-19-2021'),
          y: 66
        }],
        borderColor: '#ff3366',
        backgroundColor: '#ff3366',
      },
      {
        label: 'Dataset 2',
        data: [{
          x: new Date('10-16-2021'),
          y: 31
        }, {
          x: new Date('10-18-2021'),
          y: 14
        }, {
          x: new Date('10-19-2021'),
          y: 6
        }],
        borderColor: '#880000',
        backgroundColor: '#880000'
      }
    ]
  },
  options: {
    interaction: {
      mode: 'index',
      intersect: true,
    },
    responsive: true,
    scales: {
      y: {
        type: 'linear',
        display: true,
        position: 'left',
      },
      x: {
        type: "time",
        time: {
          unit: "day"
        }
      }
    },
  }
});
html prettyprint-override"><canvas id="lastSevenDaysOverview"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js/dist/chart.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.bundle.min.js"></script>
 类似资料:
  • 我看过很多关于如何在chart.js中添加数据的教程,但都是针对单个图表的。 我使用chartjs创建多个图表(每个图表都有自己的画布和唯一的ID)。例如:图表1位于id=“c1”的画布中,图表2位于id=“c2”的画布中。如何选择图表1并添加新数据?

  • 我一直在使用图表。js图表。js文档 我有一张显示多条线的图表。该图是单位时间内药物浓度的变化图,我想在各种场景下运行该图,如实时、x2、x4、x8等,因此,当下一秒到来时,我希望该图使用新的计算数据进行更新,然后刷新/更新图表。 问题是图表在for循环完成之前不会刷新,我希望图表每秒显示更新的数据。 文档中说update()应该执行以下操作。。。 在图表实例上调用update()将使用任何更新的

  • 我遇到的情况是,当我在每个edittext视图中单击时,需要用日期填充动态呈现的多个编辑文本(edittext视图是以编程方式呈现的)。我不知道需要多少编辑文本,因此不能在布局XML文件中硬编码它们。 尽管我能够正确地呈现视图,但当我试图在一个edittext上设置日期时,该值总是在组中的最后一个edittext上设置。我不知道如何发送一个唯一的id来标识选定的edittext,以便正确设置日期。

  • 我想提取新闻文章在网站上发表的日期。对于某些网站,我有确切的html元素,其中日期/时间为(div,p,time),但在某些网站上,我没有: 以下是一些网站(德国网站)的链接: (2020年11月3日)http://www.linden.ch/de/aktuelles/aktuellesinformationen/?action=showinfo (2020年12月1日)http://www.re

  • 问题内容: 我想在JCalendar上禁用多个日期范围。我正在按照以下步骤操作,但是我需要知道如何添加多个日期评估器。请帮助我,谢谢。 更新:我不知道为什么我不能禁用JCalendar上的日期。我将把代码留在这里,以便大家检查。 这是我的RangeEvaluator类,从该类修改而来。 这是我使用RangeEvaluator类的方式: 我想念什么吗?请帮助我,谢谢。 问题答案: 根据您的更新,这里

  • 问题内容: 以下range_query返回预期结果: 但是,与多个范围查询一起,则不会返回任何内容: 在多个字段上使用多个range_queries的正确方法是什么? 编辑: 啊,好的,所以这是我使用range_filter而不是range_query的地方?这听起来很有希望,所以我仅使用一个范围过滤器重新编写了查询。如果我在其他地方弄乱了查询,请在此处发布所有内容。我正在执行GET,并且源密钥中