Vue echarts繪制甘特圖的示例代碼
什么是甘特圖
甘特圖(Gantt chart)又稱為橫道圖、條狀圖(Bar chart)。其通過條狀圖來顯示項(xiàng)目、進(jìn)度和其他時(shí)間相關(guān)的系統(tǒng)進(jìn)展的內(nèi)在關(guān)系隨著時(shí)間進(jìn)展的情況。以提出者亨利·勞倫斯·甘特(Henry Laurence Gantt)先生的名字命名。
甘特圖以圖示通過活動(dòng)列表和時(shí)間刻度表示出特定項(xiàng)目的順序與持續(xù)時(shí)間。一條線條圖,橫軸表示時(shí)間,縱軸表示項(xiàng)目,線條表示期間計(jì)劃和實(shí)際完成情況。直觀表明計(jì)劃何時(shí)進(jìn)行,進(jìn)展與要求的對(duì)比。便于管理者弄清項(xiàng)目的剩余任務(wù),評(píng)估工作進(jìn)度。

1、不同的顏色表示不同的階段。
2、每一行表示一個(gè)任務(wù)。
3、任務(wù)與任務(wù)之間的黑色箭頭表示任務(wù)之間的依賴關(guān)系,必需完成前面的才能完成后面的。
通過這一張甘特圖,能一眼看出以下信息:
今天應(yīng)該做什么任務(wù)
這個(gè)任務(wù)從什么時(shí)候開始,到什么時(shí)候結(jié)束
在某一段時(shí)間有哪些任務(wù)
應(yīng)該先做哪些任務(wù)再做哪些任務(wù)
哪些任務(wù)可以同時(shí)做
這個(gè)任務(wù)是否被其他任務(wù)依賴,如果是,那么這個(gè)任務(wù)就不能推遲,必需按時(shí)完成或者提前完成,否則會(huì)影響后面的任務(wù)
大任務(wù)下面有哪些子任務(wù)
可以顯示任務(wù)的里程碑是什么時(shí)候
使用場(chǎng)景
主要用于橫坐標(biāo)固定,比如一天24小時(shí),這樣就可以根據(jù)Y軸數(shù)據(jù)可正可負(fù)
速用示例版
可以直接將option 復(fù)制即可
option = {
tooltip: {
trigger: 'axis'
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
toolbox: {
show: true,
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
splitLine: {
show: true
},
axisLabel: {
padding: [0, 0, 0, -20] // 四個(gè)數(shù)字分別為上右下左與原位置距離
},
data: ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00','07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00', '24:00']
},
yAxis: {
type: 'value',
name: '單位(kW)',
// scale: true,
splitLine: {
show: false
},
axisLabel: {
formatter: '{value}',
}
},
series: [
{
name: '',
type: 'line',
smooth: true,
showSymbol: false,
symbol: false,
lineStyle: {
normal: {
width: 10
}
},
markPoint: {
data: [
{
name: '最大值',
type: 'max',
valueIndex: 0
}
]
},
data: [300, 300, 300, 300, 300, 300, 300],
},
{
name: '',
type: 'line',
smooth: true,
showSymbol: false,
symbol: false,
lineStyle: {
width: 10
},
markPoint: {
data: [
{
name: '最大值',
type: 'max',
valueIndex: 0
}
]
},
data: ['','','','','','', 500, 500, 500, 500, 500]
},
{
name: '',
type: 'line',
smooth: true,
showSymbol: false,
symbol: false,
lineStyle: {
normal: {
width: 10
}
},
markPoint: {
data: [
{
name: '最大值',
type: 'max',
valueIndex: 0
}
]
},
data: ['','','','','','','', '', '','',-100, -100,-100, -100,-100]
},
{
name: '',
type: 'line',
smooth: true,
showSymbol: false,
symbol: false,
lineStyle: {
normal: {
width: 10
}
},
markPoint: {
data: [
{
name: '最大值',
type: 'max',
valueIndex: 0
}
]
},
data: ['','','','','','','', '', '','','','','','','',200,200,200,200,200,200,200,200,200,200]
}
]
};

潤(rùn)雨細(xì)無聲版
<div ref="strategyDomRef"
style="width: 800px;
height: 600px;"
>
import * as echarts from 'echarts'
mounted() {
let apiData = [
{
startTime: '00:00',
endTime: '05:00',
value: 200,
},
{
startTime: '05:00',
endTime: '12:00',
value: 400,
},
{
startTime: '12:00',
endTime: '18:00',
value: -200,
},
{
startTime: '18:00',
endTime: '20:00',
value: 300,
},
{
startTime: '20:00',
endTime: '24:00',
value: 500,
},
]
this.dealArr(apiData)
this.echartsDraw()
},
methods:{
//數(shù)據(jù)處理
dealArr(apiData) {
let YAxis = []
apiData.forEach((element) => {
let dealArr = new Array(
element.endTime == '24:00' ? 25 : parseInt(element.endTime) + 1
).fill(Number(element.value))
let yItem = {
name: ' ',
type: 'line',
showSymbol: false,
endLabel: {
show: true,
formatter: '{c}',
position: 'start',
fontSize: 12,
},
lineStyle: {
width: 10,
color: '#36CFC9',
},
data: dealArr.fill('', 0, parseInt(element.startTime)),
}
YAxis.push(yItem)
})
this.yAxis = YAxis
},
//圖表繪制
echartsDraw(){
let charts = echarts.init(this.$refs.strategyDomRef)
let option = {
tooltip: {
trigger: 'axis',
formatter: function (params) {
return '<br/> 功率 : ' + params[0].value
},
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true,
},
xAxis: {
type: 'category',
boundaryGap: false,
splitLine: {
// 網(wǎng)格線
show: true,
lineStyle: {
//分割線
color: '#C0C4CC',
width: 1,
type: 'dashed', //dotted:虛線 solid:實(shí)線
},
},
axisLabel: {
padding: [0, 0, 0, -20], // 四個(gè)數(shù)字分別為上右下左與原位置距離
},
data: [
'00:00',
'01:00',
'02:00',
'03:00',
'04:00',
'05:00',
'06:00',
'07:00',
'08:00',
'09:00',
'10:00',
'11:00',
'12:00',
'13:00',
'14:00',
'15:00',
'16:00',
'17:00',
'18:00',
'19:00',
'20:00',
'21:00',
'22:00',
'23:00',
'24:00',
],
},
yAxis: {
type: 'value',
name: '單位(kW)',
splitLine: {
// 網(wǎng)格線
show: true,
lineStyle: {
//分割線
color: '#C0C4CC',
width: 1,
type: 'dashed', //dotted:虛線 solid:實(shí)線
},
},
axisLabel: {
formatter: '{value}',
},
},
series: this.yAxis,
}
charts.setOption(option, true)
//清空畫布,防止緩存
charts.clear()
//使用剛指定的配置項(xiàng)和數(shù)據(jù)顯示圖表。
charts.setOption(option, true)
window.addEventListener('resize', function () {
charts.resize()
})
}
}

到此這篇關(guān)于Vue echarts繪制甘特圖的示例代碼的文章就介紹到這了,更多相關(guān)Vue echarts甘特圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue使用VueUse構(gòu)建一個(gè)支持暫停/重置的CountUp組件
本文介紹了如何利用 VueUse 的 useRafFn 從零構(gòu)建一個(gè)功能更強(qiáng)大的 CountUp 組件,它不僅支持 vue-countup-v3 的全部特性,還額外提供了 pause、resume、reset 等命令式控制方法,感興趣的小伙伴可以了解下2026-04-04
利用Vue3+ElementUI樹形菜單實(shí)現(xiàn)層次化用戶界面
ElementUI是一個(gè)超棒的UI框架,它基于Vue.js提供了豐富的組件和樣式,可以幫你快速構(gòu)建出美觀實(shí)用的登陸頁(yè)面,這篇文章主要介紹了利用Vue3+ElementUI樹形菜單實(shí)現(xiàn)層次化用戶界面的相關(guān)資料,需要的朋友可以參考下2026-04-04
從0到1搭建element后臺(tái)框架優(yōu)化篇(打包優(yōu)化)
這篇文章主要介紹了從0到1搭建element后臺(tái)框架優(yōu)化篇(打包優(yōu)化),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
在Vue中實(shí)現(xiàn)不刷新的iframe頁(yè)面的方案
在Vue項(xiàng)目中,我們可能會(huì)遇到這樣的需求:需要在應(yīng)用中嵌入iframe頁(yè)面,并且要求在路由切換的過程中,iframe的內(nèi)容不會(huì)被刷新,本文將介紹如何解決這個(gè)問題,并給出具體的實(shí)現(xiàn)方案,需要的朋友可以參考下2025-01-01
Vue利用mockjs編寫假數(shù)據(jù)并應(yīng)用的問題記錄
這篇文章主要介紹了Vue利用mockjs編寫假數(shù)據(jù)并應(yīng)用,本文通過實(shí)例代碼給大家詳細(xì)講解,對(duì)Vue?mockjs數(shù)據(jù)相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2022-12-12

