echarts绘制一个散点图,纵坐标为类型,横坐标为日期加时分秒,怎么让同一类型的点相互叠加时颜色加深
时间: 2023-11-28 08:48:56 浏览: 161
可以通过 ECharts 的数据可视化配置项 `visualMap` 来实现。
首先,需要将数据按照类型进行分组,并且将每一组中的日期加时分秒转换为时间戳,这样才能在散点图中按照时间排序,同时也便于后续使用 visualMap 进行颜色映射。可以使用 JavaScript 中的 `reduce` 方法进行分组和时间戳转换。
然后,在 ECharts 的 `series` 中配置散点图,并且启用 visualMap。在 visualMap 中设置 `type` 为 `'continuous'`,`min` 和 `max` 分别为当前数据中最小的时间戳和最大的时间戳,`color` 为颜色的渐变范围。然后在 `series` 的 `itemStyle` 中设置 `color` 为 visualMap 的 `mapper` 函数,该函数将根据时间戳的大小返回相应的颜色。
下面是一个示例代码:
```javascript
const data = [
{ type: 'A', date: '2022-01-01 10:00:00' },
{ type: 'B', date: '2022-01-01 10:30:00' },
{ type: 'A', date: '2022-01-01 11:00:00' },
{ type: 'B', date: '2022-01-01 11:30:00' },
{ type: 'A', date: '2022-01-01 12:00:00' },
{ type: 'B', date: '2022-01-01 12:30:00' },
]
// 分组并转换时间戳
const groups = data.reduce((acc, cur) => {
const timestamp = new Date(cur.date).getTime()
if (!acc[cur.type]) {
acc[cur.type] = []
}
acc[cur.type].push(timestamp)
return acc
}, {})
// 散点图配置项
const option = {
xAxis: {
type: 'time',
},
yAxis: {
type: 'category',
data: Object.keys(groups),
},
series: [
{
type: 'scatter',
symbolSize: 10,
data: data.map(item => {
const timestamp = new Date(item.date).getTime()
return [timestamp, item.type]
}),
itemStyle: {
color: (params) => {
const timestamp = params.value[0]
const type = params.value[1]
const group = groups[type]
const min = Math.min(...group)
const max = Math.max(...group)
const range = max - min
const value = (timestamp - min) / range
return echarts.color.modifyHSL('#5A94DF', 0, 0.2 * value)
}
}
}
],
visualMap: {
type: 'continuous',
dimension: 0,
min: Math.min(...Object.values(groups).flat()),
max: Math.max(...Object.values(groups).flat()),
color: ['#5A94DF', '#003A6B'],
}
}
// 使用 ECharts 实例进行绘制
const chart = echarts.init(document.getElementById('chart'))
chart.setOption(option)
```
在上面的代码中,我们首先使用 `reduce` 方法对数据进行分组,并将每个日期转换为时间戳。然后在散点图的配置项中,我们将 x 轴的类型设置为 `'time'`,y 轴的类型设置为 `'category'`,并将分类数据设置为分组的类型。在 `series` 中配置散点图,使用 `map` 方法将每个数据项中的日期转换为时间戳,并将类型作为 y 轴的值。在 `itemStyle` 中设置颜色为 visualMap 的 `mapper` 函数,该函数将根据时间戳的大小返回相应的颜色。最后,在 visualMap 中设置 `type` 为 `'continuous'`,`min` 和 `max` 分别为当前数据中最小的时间戳和最大的时间戳,`color` 为颜色的渐变范围。
注意:在使用 `modifyHSL` 方法时,第三个参数需要在 0~1 的范围内,因此需要将 `value` 的范围从 0~时间戳的范围转换为 0~1 的范围。同时,为了让同一类型的点相互叠加时颜色加深,我们使用了 `modifyHSL` 方法对颜色进行调整,将亮度的值调整为原来的 20%。
阅读全文