首页 前端知识 Echarts 定制化日历图

Echarts 定制化日历图

2024-05-25 09:05:49 前端知识 前端哥 477 169 我要收藏

目录

改造一(变化X轴、Y轴label):

改造二(单元格、图例改造):

改造三(tooltip、细节优化):


最近在做可视化,发现日历图挺有意思,分享一波吧!!!

首先放下官方示例网址:Examples - Apache ECharts

 

 将它拉下备用后面在此基础解释并改造,如下代码

import React, { useEffect, useRef } from 'react'
import * as echarts from 'echarts'
type EChartsOption = echarts.EChartsOption
const App: React.FC = () => {
const content = useRef(null)
// 生成数据
function getVirtualData(year: string) {
const date = +echarts.time.parse(year + '-01-01')
const end = +echarts.time.parse(year + '-12-31')
const dayTime = 3600 * 24 * 1000
const data: [string, number][] = []
for (let time = date; time <= end; time += dayTime) {
data.push([
echarts.time.format(time, '{yyyy}-{MM}-{dd}', false),
Math.floor(Math.random() * 1000),
])
}
return data
}
// 图表配置
const option: EChartsOption = {
visualMap: {
show: false,
min: 0,
max: 10000,
},
calendar: {
range: '2017',
},
series: {
type: 'heatmap',
coordinateSystem: 'calendar',
data: getVirtualData('2017'),
},
}
// 渲染函数
const render = () => {
const myChart = echarts.init(content.current!)
option && myChart.setOption(option)
}
useEffect(() => {
if (content.current) {
render()
}
}, [])
return (
<>
<div ref={content} style={{ height: '500px' }}></div>
</>
)
}
export default App
复制

运行结果如图:

 下面开始改造代码了!!!


改造一(变化X轴、Y轴label):

加上了dayLabel、monthLabel、yearLabel配置,并且去掉月份分割线

// 图表配置
const option: EChartsOption = {
visualMap: {
show: false,
min: 0,
max: 10000,
},
calendar: {
range: '2017',
splitLine: {
// 去掉月份分割线
show: false,
},
dayLabel: {
firstDay: 0,
fontSize: 14,
margin: 16,
color: 'rgb(140,140,140)',
verticalAlign: 'middle',
nameMap: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
},
monthLabel: {
nameMap: 'ZH',
color: 'rgb(140,140,140)',
align: 'center',
margin: 4,
},
yearLabel: {
show: false,
},
},
series: {
type: 'heatmap',
coordinateSystem: 'calendar',
data: getVirtualData('2017'),
},
}
复制

改造二(单元格、图例改造):

改动visualMap(视觉映射)配置,即图例与日历图表映射

visualMap: {
type: 'piecewise',
orient: 'horizontal',
top:230,
right:380,
min: 0,
max: 1000,
text: ['多', '少'],
textStyle: {
color: 'rgb(140,140,140)',
fontSize: 14,
// 处理两端文字与图例单元格距离
padding:[0,16],
borderWidth:0.000001,
borderColor:'transparent'
},
showLabel: false,
itemWidth: 20,
itemHeight: 20,
itemGap: 4,
selectedMode: false, //禁止选择
inRange: {
color: [
'rgba(233,233,233)',
'#95de64',
'#52c41a',
'#237804',
'#092b00',
],
},
//图例分段
pieces: [
{ min: 1000 },
{ min: 800, max: 1000 },
{ min: 500, max: 800 },
{ min: 300, max: 500 },
{ min: 1, max: 300 },
{ value: 0, color: 'rgba(233,233,233)' },
],
},
复制

改造三(tooltip、细节优化):

 样式可自行处理,tooltip可加气泡箭头,利用浮动做定位,可自行调节,有兴趣可试试

// 图表配置
const option: EChartsOption = {
tooltip: {
trigger: 'item',
borderWidth: 0,
formatter: (params: any) => {
return `<div><b>${params.value[0]}</b> : ${params.value[1]}</div>`
},
},
visualMap: {
type: 'piecewise',
orient: 'horizontal',
top: 230,
right: 380,
min: 0,
max: 1000,
text: ['多', '少'],
textStyle: {
color: 'rgb(140,140,140)',
fontSize: 14,
// 处理两端文字与图例单元格距离
padding: [0, 16],
borderWidth: 0.000001,
borderColor: 'transparent',
},
showLabel: false,
itemWidth: 20,
itemHeight: 20,
itemGap: 4,
selectedMode: false, //禁止选择
inRange: {
color: [
'rgba(233,233,233)',
'#95de64',
'#52c41a',
'#237804',
'#092b00',
],
},
//图例分段
pieces: [
{ min: 1000 },
{ min: 800, max: 1000 },
{ min: 500, max: 800 },
{ min: 300, max: 500 },
{ min: 1, max: 300 },
{ value: 0, color: 'rgba(233,233,233)' },
],
},
calendar: {
range: '2017',
cellSize: [20, 20], //格子尺寸
itemStyle: {
//解决格子间距
borderWidth: 5,
borderColor: '#fff',
},
splitLine: {
// 去掉月份分割线
show: false,
},
dayLabel: {
firstDay: 0,
fontSize: 14,
margin: 16,
color: 'rgb(140,140,140)',
verticalAlign: 'middle',
nameMap: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
},
monthLabel: {
nameMap: 'ZH',
color: 'rgb(140,140,140)',
align: 'center',
margin: 4,
},
yearLabel: {
show: false,
},
},
series: {
type: 'heatmap',
coordinateSystem: 'calendar',
data: getVirtualData('2017'),
// dimensions:, 数据名称处理,数据多时可以使用
itemStyle: {
borderRadius: 3,
},
emphasis: {
disabled: true,
},
},
}
复制

转载请注明出处或者链接地址:https://www.qianduange.cn//article/9410.html
标签
评论
还可以输入200
共0条数据,当前/页
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!