次轴未显示在chart.js、线图上

3zwjbxry  于 2023-11-18  发布在  Chart.js
关注(0)|答案(1)|浏览(183)

我使用chart.js创建了一个折线图,我希望第二个y轴(MinutesofUsage)显示在图表的右侧(第二轴)。
这是显示图形的代码部分。

  1. <script>
  2. var data = <?php echo json_encode($data); ?>;
  3. var callTypes = <?php echo json_encode(array_unique(array_column($data, "callType"))); ?>;
  4. // Function to create a chart with dynamic Y-axis scales
  5. function createChartWithYAxis(index) {
  6. if (index < callTypes.length) {
  7. var callType = callTypes[index];
  8. var chartContainer = document.createElement('div');
  9. chartContainer.className = 'chart-container';
  10. // Add the chart name
  11. var chartTitle = document.createElement('div');
  12. chartTitle.innerText = 'Chart: ' + callType;
  13. chartContainer.appendChild(chartTitle);
  14. var ctx = document.createElement('canvas').getContext('2d');
  15. ctx.canvas.id = callType + 'Chart';
  16. ctx.canvas.style.display = 'block';
  17. chartContainer.appendChild(ctx.canvas);
  18. document.body.appendChild(chartContainer);
  19. var filteredData = data.filter(function (item) {
  20. return item.callType === callType;
  21. });
  22. var dates = filteredData.map(function (item) {
  23. return item.date;
  24. });
  25. var revenues = filteredData.map(function (item) {
  26. return item.revenue;
  27. });
  28. var minutesUsage = filteredData.map(function (item) {
  29. return item.minutesUsage;
  30. });
  31. new Chart(ctx, {
  32. type: 'line',
  33. data: {
  34. labels: dates,
  35. datasets: [
  36. {
  37. label: 'Minutes Usage',
  38. data: minutesUsage,
  39. borderColor: 'green',
  40. borderWidth: 2,
  41. fill: false,
  42. yAxisID: 'minutes-axis'
  43. },
  44. {
  45. label: 'Total Revenue',
  46. data: revenues,
  47. borderColor: 'blue',
  48. borderWidth: 2,
  49. fill: false,
  50. yAxisID: 'revenue-axis'
  51. }
  52. ]
  53. },
  54. options: {
  55. responsive: true,
  56. layout: {
  57. padding: {
  58. left: 5,
  59. right: 5
  60. }
  61. },
  62. scales: {
  63. x: [{
  64. type: 'time',
  65. time: {
  66. unit: 'day'
  67. },
  68. title: {
  69. display: true,
  70. text: 'Date'
  71. }
  72. }],
  73. y: [
  74. {
  75. id: 'revenue-axis',
  76. position: 'left', //position of the y-axis(revenue-axis)
  77. title: {
  78. display: true,
  79. text: 'Total Revenue',
  80. fontColor: 'blue' // Set the color for the revenue y-axis label
  81. },
  82. ticks: {
  83. fontColor: 'blue' // Set the color for the revenue y-axis ticks
  84. }
  85. },
  86. {
  87. id: 'minutes-axis',
  88. position: 'right', //position of the y-axis(minutesofusage-axis)
  89. title: {
  90. display: true,
  91. text: 'Minutes Usage',
  92. fontColor: 'green' // Set the color for the minutes y-axis label
  93. },
  94. ticks: {
  95. fontColor: 'green' // Set the color for the minutes y-axis ticks
  96. }
  97. }
  98. ]
  99. },
  100. plugins: {
  101. datalabels: {
  102. display: 'auto',
  103. color: 'black',
  104. }
  105. }
  106. }
  107. });
  108. // Smooth scroll to the newly created chart
  109. chartContainer.scrollIntoView({ behavior: 'smooth' });
  110. } else {
  111. clearInterval(chartInterval); // Stop the slideshow
  112. }
  113. }
  114. var currentIndex = 0;
  115. var chartInterval = setInterval(function() {
  116. createChartWithYAxis(currentIndex);
  117. currentIndex++;
  118. }, 5000); // Delay between chart displays (in milliseconds)
  119. </script>

字符串
我尝试将位置属性更改为right,但图表没有任何变化。

92dk7w1h

92dk7w1h1#

根据您使用的Chart.js版本,chart.options.scales.xchart.options.scales.y不应该是数组。您应该在chart.options.scales中的每个轴上有一个对象,例如:

  1. var ctx = document.getElementById('myChart').getContext('2d');
  2. var cfg = {
  3. type: 'line',
  4. data: {
  5. labels: [0,10,20,30,40,50,60,70,80,90,100],
  6. datasets: [{
  7. label: 'A',
  8. data: [0,1,2,3,4,5,6,7,8,9,10],
  9. yAxisID: 'revenueAxis'
  10. },{
  11. label: 'B',
  12. data: [5,10,15,30,25,20,35,50,45,40,45],
  13. yAxisID: 'minutesAxis'
  14. }]
  15. },
  16. options: {
  17. scales: {
  18. x: {
  19. title: {
  20. text: 'Date',
  21. display: true
  22. }
  23. },
  24. revenueAxis: {
  25. type: 'linear',
  26. title: {
  27. text: 'Total Revenue',
  28. display: true
  29. },
  30. position: 'left'
  31. },
  32. minutesAxis: {
  33. type: 'linear',
  34. position:'right',
  35. title: {
  36. text: 'Minutes Axis',
  37. display: true
  38. },
  39. }
  40. }
  41. },
  42. }
  43. var myChart = new Chart(ctx, cfg);

个字符

展开查看全部

相关问题