Chart.js中具有时间y轴的水平浮动条形图

xfb7svmp  于 2023-03-08  发布在  Chart.js
关注(0)|答案(2)|浏览(204)

我尝试修改https://www.chartjs.org/docs/latest/samples/bar/floating.html来创建一种时间轴图表,其中水平轴(范围数据)是时间戳,不幸的是我似乎无法显示数据,也没有看到任何错误消息等。

  1. <html>
  2. <head>
  3. <script src="https://cdn.jsdelivr.net/npm/moment@^2"></script>
  4. <script src="https://cdn.jsdelivr.net/npm/chart.js@^3"></script>
  5. <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment@^1"></script>
  6. </head>
  7. <body>
  8. <div>
  9. <canvas id="myChart"></canvas>
  10. </div>
  11. </body>
  12. <script>
  13. //const labels = ["a","b","c","d","fff","g","h"]
  14. const labels = ["a","b"]
  15. const data = {
  16. labels: labels,
  17. datasets: [
  18. {
  19. label: 'Dataset 1',
  20. data: [[moment("2021-11-23T00:24:14Z"),moment("2021-11-23T00:34:03Z")],
  21. [moment("2021-11-23T00:24:14Z"),moment("2021-11-23T00:26:35Z")]]
  22. // This works fine (without 'yAxes' below):
  23. //data: labels.map(() => {
  24. //return [Math.random(), Math.random()];
  25. //}),
  26. //backgroundColor: Utils.CHART_COLORS.red,
  27. },
  28. ]
  29. };
  30. const config = {
  31. type: 'bar',
  32. data: data,
  33. options: {
  34. yAxes: [{
  35. type: 'time',
  36. }],
  37. indexAxis: 'y',
  38. responsive: true,
  39. plugins: {
  40. legend: {
  41. position: 'top',
  42. },
  43. title: {
  44. display: true,
  45. text: 'Chart.js Floating Bar Chart'
  46. }
  47. }
  48. }
  49. };
  50. var ctx = document.getElementById("myChart").getContext("2d");
  51. new Chart(ctx, config);
  52. </script>
  53. </html>

编辑:JSF中间:https://jsfiddle.net/r5ypuvks/

beq87vna

beq87vna1#

看来我的问题是

  • chart.js 3未使用正确的轴格式
  • 我需要自己缩放图表
  • 需要将水平轴称为x
  1. <html>
  2. <head>
  3. <script src="https://cdn.jsdelivr.net/npm/moment@^2"></script>
  4. <script src="https://cdn.jsdelivr.net/npm/chart.js@^3"></script>
  5. <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment@^1"></script>
  6. </head>
  7. <body>
  8. <div>
  9. <canvas id="myChart"></canvas>
  10. </div>
  11. </body>
  12. <script>
  13. //const labels = ["a","b","c","d","fff","g","h"]
  14. const labels = ["a","b"]
  15. const data = {
  16. labels: labels,
  17. datasets: [
  18. {
  19. label: 'Dataset 1',
  20. data: [[("2021-11-23T00:24:14Z"),("2021-11-23T00:34:03Z")],
  21. [("2021-11-23T00:25:14Z"),("2021-11-23T00:26:35Z")]]
  22. // This works fine (without 'yAxes' below):
  23. //data: labels.map(() => {
  24. //return [Math.random(), Math.random()];
  25. //}),
  26. //backgroundColor: Utils.CHART_COLORS.red,
  27. },
  28. ]
  29. };
  30. const config = {
  31. type: 'bar',
  32. data: data,
  33. options: {
  34. scales: {
  35. x: {
  36. min: ("2021-11-23T00:20:14Z"),
  37. max: ("2021-11-23T00:44:14Z") ,
  38. type: 'time',
  39. },
  40. },
  41. indexAxis: 'y',
  42. responsive: true,
  43. plugins: {
  44. legend: {
  45. position: 'top',
  46. },
  47. title: {
  48. display: true,
  49. text: 'Chart.js Floating Bar Chart'
  50. }
  51. }
  52. }
  53. };
  54. var ctx = document.getElementById("myChart").getContext("2d");
  55. new Chart(ctx, config);
  56. </script>
  57. </html>
展开查看全部
bwntbbo3

bwntbbo32#

感谢@jberryman的想法。我采纳了它,并在上面构建了这个:

  1. <html>
  2. <head>
  3. <script src="https://cdn.jsdelivr.net/npm/moment@^2"></script>
  4. <script src="https://cdn.jsdelivr.net/npm/chart.js@^3"></script>
  5. <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment@^1"></script>
  6. </head>
  7. <body>
  8. <div>
  9. <canvas id="myChart"></canvas>
  10. </div>
  11. </body>
  12. <script>
  13. const data = {
  14. labels: [''],
  15. datasets: [
  16. { data: [[8,9]], backgroundColor: 'green' },
  17. { data: [[12, 14]], backgroundColor: 'green'},
  18. { data: [[7, 16]], backgroundColor: 'lightgrey'}
  19. ]
  20. };
  21. const config = {
  22. type: 'bar',
  23. data: data,
  24. options: {
  25. scales: {
  26. y: {
  27. stacked: true,
  28. },
  29. x: {
  30. min: 0,
  31. max: 24 ,
  32. ticks: {
  33. stepSize: 2
  34. }
  35. },
  36. },
  37. indexAxis: 'y',
  38. responsive: true,
  39. plugins: {
  40. legend: false,
  41. title: false
  42. }
  43. }
  44. };
  45. var ctx = document.getElementById("myChart");
  46. new Chart(ctx, config);
  47. </script>
  48. </html>

参见https://jsfiddle.net/h9vk5sfx/46/

展开查看全部

相关问题