为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Chart.js 的折线图

使用 Chart.js 的折线图

PHP
交互式爱情 2022-10-28 15:47:39
我有两个表,我在执行mysql查询(table1是pl_pl,table2是act_act)后得到的表格:table1:label   act_hrsJan-19  7Feb-20  8Mar-20  9table2:label   pl_hrsMar-20  45Apr-20  53我必须标记中的所有点act_hrs并pl_hrs使用具有共同 x 轴的折线图label 。我为此尝试了以下javascript代码:javascript代码:function show_scurve_Graph()        {            {                var plandata = <?php echo json_encode($pl_pl); ?>;                var actualdata = <?php echo json_encode($act_act); ?>;                var labels = [];                  for (var i in plandata) {                        labels.push(plandata[i].label);                  }                  for (var j in actualdata) {                        labels.push(actualdata[j].label);                  }                new Chart("scurve_chart", {  type: 'line',  data: {    labels: Array.from(labels),    datasets: [{        label: "Planned Hours",        fill: false,        borderColor: "rgba(255, 0, 0, 1)",        pointHoverBackgroundColor: "rgba(255, 0, 0, 1)",        data: plandata.map(o => ({ x: Number(o.label), y: Number(o.pl_hrs)}))      },      {        label: "Actual Hours",        fill: false,        backgroundColor: "rgba(0, 255, 0, 0.75)",        borderColor: "rgba(0, 255, 0, 1)",        pointHoverBackgroundColor: "rgba(0, 255, 0, 1)",        pointHoverBorderColor: "rgba(0, 255, 0, 1)",        data: actualdata.map(o => ({x: Number(o.label), y: Number(o.act_hrs)}))      }    ]  },  options: {        tooltips: {      callbacks: {        title: (tooltipItem, data) => "Month " + data.datasets[tooltipItem[0].datasetIndex].data[tooltipItem[0].index].x      }    },    scales: {      yAxes: [{        ticks: {          beginAtZero: true        },       scaleLabel: {        display: true,        labelString: 'Hours'      }      }],      xAxes: [{        ticks: {                    min: 0,          max: 53,          stepSize: 1        },        scaleLabel: {        display: true,        labelString: 'Month'      }      }]    }  }}); }}
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

以下几行是罪魁祸首:


data: plandata.map(o => ({ x: Number(o.label), y: Number(o.pl_hrs)}))


data: actualdata.map(o => ({x: Number(o.label), y: Number(o.act_hrs)}))

map回调应该只返回小时数字,如下所示:


// Planned

data: plandata.map(o => Number(o.pl_hrs))


// Actual

data: actualdata.map(o => Number(o.act_hrs))

该data属性只需要您要在图形上绘制的图形数组。这是一个jsfiddle


labels注意:您应该根据您在图表配置中使用的标签对所有数据源上的数据进行规范化。我的意思是,数据数组中数字的顺序应该与标签顺序相对应。


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信