echarts+js生成profile图。根据数组内对象的两个时间值生成x轴时间轴,再由对象中的dev值分成不同组生成y轴,中间的图形的值由同时间,同一dev对应生成
时间: 2024-02-24 14:57:58 浏览: 56
解决vue数组中对象属性变化页面不渲染问题
5星 · 资源好评率100%
实现这个功能,可以通过 echarts 绘制 profile 图。首先,需要将数组按照时间顺序排序,然后遍历数组,根据每个对象的开始时间和结束时间生成 x 轴时间轴,再根据每个对象的 dev 值分组生成 y 轴,然后根据同一时间、同一 dev 对应的值生成数据系列。最后,使用 echarts 绘制 profile 图。
以下是一个示例代码:
```javascript
// 假设数据数组为 data,其中每个对象有 startTime、endTime、dev 和 value 四个属性
data.sort(function(a, b) {
return a.startTime - b.startTime; // 将数组按照开始时间排序
});
var xAxisData = []; // x 轴时间轴数据
var yAxisData = {}; // y 轴分组数据
var seriesData = []; // 数据系列
for (var i = 0; i < data.length; i++) {
var item = data[i];
var start = item.startTime;
var end = item.endTime;
var dev = item.dev;
var value = item.value;
// 生成 x 轴时间轴数据
xAxisData.push(start);
xAxisData.push(end);
// 生成 y 轴分组数据
if (!yAxisData[dev]) {
yAxisData[dev] = [];
}
yAxisData[dev].push(value);
// 生成数据系列
var index = seriesData.findIndex(function(series) {
return series.name === dev;
});
if (index === -1) {
seriesData.push({
name: dev,
type: 'line',
smooth: true,
data: []
});
index = seriesData.length - 1;
}
seriesData[index].data.push({
value: [start, end, value]
});
}
// 使用 echarts 绘制 profile 图
var chart = echarts.init(document.getElementById('chart'));
chart.setOption({
xAxis: {
type: 'time',
data: xAxisData,
splitLine: {
show: false
}
},
yAxis: {
type: 'category',
data: Object.keys(yAxisData).reverse(),
splitLine: {
show: false
}
},
series: seriesData
});
```
上述代码会根据数据数组中每个对象的 startTime、endTime、dev 和 value 属性生成 profile 图,并将它插入到页面中。你需要根据自己的需求修改代码和样式来实现不同的效果。
阅读全文