Диаграмма.JS Начинается в 00:00 утра и заканчивается в 23:59 вечера

#charts #chart.js #vue-chartjs

Вопрос:

Мне нужен небольшой совет.

У меня есть следующая диаграмма:

введите описание изображения здесь

Я хотел бы начать ось графика в 00:00 и закончить в 23.59, но мне все равно нужно построить последнюю точку предыдущего дня и первую точку следующего дня (чтобы линия/кривая продолжалась), но не расширять представление диаграммы, чтобы включить эти точки. Я нарисовал линии там, где я хотел бы, чтобы диаграмма начиналась и заканчивалась.

У кого-нибудь есть идеи, как я могу этого добиться? Это дневная диаграмма приливов, поэтому нужно показать только кривую одного дня.

Вот код, который у меня сейчас есть:

 const chart = new Chart(this.$refs.myChart, {  type: "line",  data: {  labels: [  new Date(1634847780000), // Last of previous day - Low Tide  new Date(1634869320000), // High Tide 1  new Date(1634891880000), // Low Tide 1  new Date(1634913060000), // High Tide 2  new Date(1634935560000), // Low Tide 2  new Date(1634955720000), // First of next day - High Tide  ],  datasets: [  {  label: "My First dataset",  data: [0.7, 5.8, 0.8, 5.8, 0.8, 5.1], // Meters above sea  tension: 0.5,  backgroundColor: "#000000",  fill: {  target: "origin",  },  },  ],  },  options: {  interaction: {  mode: "point",  },  hover: {  mode: "point",  },  onHover: (e) =gt; {  const canvasPosition = getRelativePosition(e, chart);   // Substitute the appropriate scale IDs  const dataX = chart.scales.x.getValueForPixel(canvasPosition.x);  const dataY = chart.scales.y.getValueForPixel(canvasPosition.y);  console.log(dataY);  },  plugins: {  tooltip: {  enabled: true,  },  legend: {  display: false,  },  },  scales: {  xAxis: {  type: "time",  time: {  unit: "hour",  displayFormats: {  hour: "HH:mm",  },   // minUnit: moment(1634860800000).format("HH:mm"),  },  },  yAxis: {  ticks: {  callback: function(value, index, values) {  return value   "m";  },  },  },  },  },  });  

Заранее спасибо!

Ответ №1:

Вы можете использовать min и max proppertys на оси x, например, так:

 const chart = new Chart('chartJSContainer', {  type: "line",  data: {  labels: [  new Date(1634847780000), // Last of previous day - Low Tide  new Date(1634869320000), // High Tide 1  new Date(1634891880000), // Low Tide 1  new Date(1634913060000), // High Tide 2  new Date(1634935560000), // Low Tide 2  new Date(1634955720000), // First of next day - High Tide  ],  datasets: [{  label: "My First dataset",  data: [0.7, 5.8, 0.8, 5.8, 0.8, 5.1], // Meters above sea  tension: 0.5,  backgroundColor: "#000000",  fill: {  target: "origin",  },  }, ],  },  options: {  interaction: {  mode: "point",  },  hover: {  mode: "point",  },  onHover: (e) =gt; {  const canvasPosition = getRelativePosition(e, chart);   // Substitute the appropriate scale IDs  const dataX = chart.scales.x.getValueForPixel(canvasPosition.x);  const dataY = chart.scales.y.getValueForPixel(canvasPosition.y);  console.log(dataY);  },  plugins: {  tooltip: {  enabled: true,  },  legend: {  display: false,  },  },  scales: {  xAxis: {  type: "time",  min: new Date(1634853600000), // Should calculate this dynamic, not best way but can use: new Date().setHours(0,0,0,0)  max: new Date(1634939999000), // Should calculate this dynamic, not best way but can use: new Date().setHours(23,59,59)  time: {  unit: "hour",  displayFormats: {  hour: "HH:mm",  },   // minUnit: moment(1634860800000).format("HH:mm"),  },  },  yAxis: {  ticks: {  callback: function(value, index, values) {  return value   "m";  },  },  },  },  }, }); 
 lt;bodygt;  lt;canvas id="chartJSContainer" width="600" height="400"gt;lt;/canvasgt;  lt;script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.5.1/chart.js"gt;lt;/scriptgt;  lt;script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.bundle.min.js"gt;lt;/scriptgt; lt;/bodygt;