使用canvasjs在图表中显示y轴

xkrw2x1b  于 2021-07-14  发布在  Mysql
关注(0)|答案(1)|浏览(405)

我做了一个图表,显示机器和它们被固定的时间(机器x,时间y)数据通过mysql动态加载,如下所示

  1. <?php
  2. include_once(“connexion.php”);
  3. ini_set(‘max_execution_time’,300);
  4. //ini_set(‘error_reporting’, E_ALL);
  5. $sq = select machine,date_tech,time(time_fin time_deb) as diff from action_archiv_tech WHERE (date_tech BETWEEN 2018-09-10 AND 2018-10-06’)”;
  6. $r = mysql_query($sq) or (die(mysql_error()));
  7. while($tab = mysql_fetch_assoc($r)) {
  8. $machine = $tab[‘machine’];
  9. $diff = $tab[‘diff’];
  10. // $data[] = [“label”=>$machine, “y”=>$diff];
  11. $data[] = array(
  12. label => $tab[‘machine’],
  13. y => $tab[‘diff’]
  14. );
  15. }
  16. ?>
  17. <!DOCTYPE HTML>
  18. <html>
  19. <head>
  20. <meta charset=”UTF-8”>
  21. <script>
  22. window.onload = function () {
  23. var chart = new CanvasJS.Chart(“chartContainer”, {
  24. theme:”light2″,
  25. animationEnabled: true,
  26. title:{
  27. text: PM
  28. },
  29. axisY :{
  30. includeZero: false,
  31. title: Heures”,
  32. suffix: H
  33. },
  34. toolTip: {
  35. shared: true
  36. },
  37. legend:{
  38. cursor:”pointer”,
  39. itemclick : toggleDataSeries
  40. },
  41. data: [
  42. {
  43. type: spline”,
  44. showInLegend: true,
  45. yValueFormatString: “##.00H”,
  46. name: Curative”,
  47. dataPoints: <?php echo json_encode($data); ?>
  48. }
  49. ]
  50. });
  51. chart.render();
  52. function toggleDataSeries(e) {
  53. if (typeof(e.dataSeries.visible) === undefined || e.dataSeries.visible ){
  54. e.dataSeries.visible = false;
  55. } else {
  56. e.dataSeries.visible = true;
  57. }
  58. chart.render();
  59. }
  60. }
  61. </script>
  62. </head>
  63. <body>
  64. <div id=”chartContainer” style=”height: 370px; max-width: 1920px; margin: 0px auto;”></div>
  65. <script src=”../../canvasjs.min.js”></script>
  66. </body>
  67. </html>

但结果与预期不符
结果:https://i.stack.imgur.com/zyizm.png
你能帮我找出解决这个问题的方法吗:)

yhxst69z

yhxst69z1#

看起来您是在用y值传递日期和时间,而canvasjs在axisy中只支持数字。有关更多信息,请参阅文档。但是,您可以通过传递-值作为时间戳来解决这个问题,并在轴标签和工具提示中设置值的格式,如下面的示例所示,这里是相同的jsfiddle。

  1. var chart = new CanvasJS.Chart("chartContainer", {
  2. title: {
  3. text: "Machine Operating Time"
  4. },
  5. axisY: {
  6. minimum: (new Date(2016, 0, 25, 17, 30)).getTime(),
  7. interval: (12 * 60 * 60 * 1000),
  8. labelFormatter: function(e){
  9. return CanvasJS.formatDate(e.value, "DD-MMM h:mm TT");
  10. }
  11. },
  12. toolTip:{
  13. contentFormatter: function ( e ) {
  14. return "<strong>Machine " + e.entries[0].dataPoint.label + "</strong></br> Start Time: " + CanvasJS.formatDate(e.entries[0].dataPoint.y[0], "DD-MMM h:mm TT") + "</br> Stop Time: " + CanvasJS.formatDate(e.entries[0].dataPoint.y[1], "DD-MMM h:mm TT");
  15. }},
  16. data: [{
  17. type: "rangeColumn",
  18. dataPoints: [
  19. { label: "A", y: [(new Date(2016, 0, 25, 18, 30)).getTime(), (new Date(2016, 0, 26, 11, 00)).getTime()] }, //.getTime() returns timestamp => y-value is numeric
  20. { label: "B", y: [(new Date(2016, 0, 26, 12, 00)).getTime(), (new Date(2016, 0, 27, 14, 00)).getTime()] },
  21. { label: "C", y: [(new Date(2016, 0, 27, 3, 30)).getTime(), (new Date(2016, 0, 27, 14, 00)).getTime()] },
  22. { label: "D", y: [(new Date(2016, 0, 27, 12, 00)).getTime(), (new Date(2016, 0, 28, 14, 00)).getTime()] }
  23. ]
  24. }]
  25. });
  26. chart.render();
  1. <script src="http://canvasjs.com/assets/script/canvasjs.min.js"></script>
  2. <div id="chartContainer" style="height: 260px; width: 100%;"></div>
展开查看全部

相关问题