vue实现echarts甘特图


使用场景

主要用于横坐标固定,比如一天24小时,这样就可以根据Y轴数据可正可负

速用示例版

可以直接将option 复制即可

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]    // 四个数字分别为上右下左与原位置距离
    },
    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]
    }
  ]
};

在这里插入图片描述

来源:前端~初学者
业务需求比较相似,而且时间紧张,幸得此文

润雨细无声版

<div ref="strategyDomRef"
 style="width: 800px;
        height: 600px;"
>
import * as echarts from 'echarts'
data(){
	return{
		yAxis:[]
	}
},
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:{
	//数据处理
	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: {
            // 网格线
            show: true,
            lineStyle: {
              //分割线
              color: '#C0C4CC',
              width: 1,
              type: 'dashed', //dotted:虚线 solid:实线
            },
          },
          axisLabel: {
            padding: [0, 0, 0, -20], // 四个数字分别为上右下左与原位置距离
          },
          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: {
            // 网格线
            show: true,
            lineStyle: {
              //分割线
              color: '#C0C4CC',
              width: 1,
              type: 'dashed', //dotted:虚线 solid:实线
            },
          },
          axisLabel: {
            formatter: '{value}',
          },
        },
        series: this.yAxis,
      }
      charts.setOption(option, true)
      //清空画布,防止缓存
      charts.clear()
      //使用刚指定的配置项和数据显示图表。
      charts.setOption(option, true)
      window.addEventListener('resize', function () {
        charts.resize()
      })
	}
}

效果图
在这里插入图片描述

x时间轴非整点版

完成代码:

<template>
  <div ref="strategyDomRef"
       style="width: 1000px;
        height: 400px;">
  </div>
</template>

<script>
import * as echarts from 'echarts'
export default {
  data() {
    return {
      yAxis: [],
      xAxis: [
        '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',
      ],
    }
  },
  mounted() {
    let apiData = [
      {
        startTime: '00:00',
        endTime: '05:52',
        value: 200,
      },
      {
        startTime: '05:52',
        endTime: '12:01',
        value: 400,
      },
      {
        startTime: '12:01',
        endTime: '18:00',
        value: -200,
      },
      {
        startTime: '18:00',
        endTime: '20:12',
        value: 300,
      },
      {
        startTime: '20:12',
        endTime: '24:00',
        value: 500,
      },
    ]
    this.dealArr(apiData)
    this.echartsDraw()
  },
  methods: {
    //数据处理
    dealArr(apiData) {
      // 将非整点数据追加到x轴数据中去
      apiData.forEach((element1, index) => {
        if (index > 0) {
          const checkIndex = this.xAxis.findIndex((element2) => {
            return parseInt(element1.startTime) === parseInt(element2)
          })
          this.xAxis.splice(checkIndex + 1, 0, element1.startTime)
        }
      })
      let oldIndex = 0
      let newIndex = 0
      apiData.forEach((item3) => {
        const checkIndex2 = this.xAxis.findIndex((element4) => {
          return item3.endTime === element4
        })
        newIndex = checkIndex2
        // 先将Y轴数据按照时间顺序添加数据
        let arr1 = new Array(newIndex + 1).fill(Number(item3.value))
        let yItem = {
          name: ' ',
          type: 'line',
          showSymbol: false,
          endLabel: {
            show: true,
            formatter: '{c}',
            position: 'start',
            fontSize: 12,
          },
          lineStyle: {
            width: 10,
            color: '#36CFC9',
          },
          // 再将startTime时间之前的数据设置成‘’
          data: arr1.fill('', 0, oldIndex),
        }
        this.yAxis.push(yItem)
        const temp = newIndex
        oldIndex = temp
      })
    },
    //图表绘制
    echartsDraw() {
      let charts = echarts.init(this.$refs.strategyDomRef)
      let option = {
        tooltip: {
          trigger: 'axis',
          formatter: function (params) {
            return params[0].axisValue + '<br/> 功率 : ' + params[0].value
          },
        },
        grid: {
          top: '10%',
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true,
        },
        xAxis: {
          type: 'category',
          boundaryGap: false,
          splitLine: {
            // 网格线
            show: true,
            lineStyle: {
              //分割线
              color: '#C0C4CC',
              width: 1,
              type: 'dashed', //dotted:虚线 solid:实线
            },
          },
          axisLabel: {
            padding: [0, 0, 0, -20], // 四个数字分别为上右下左与原位置距离
          },
          data: this.xAxis,
        },
        yAxis: {
          type: 'value',
          name: '单位(kW)',
          splitLine: {
            // 网格线
            show: true,
            lineStyle: {
              //分割线
              color: '#C0C4CC',
              width: 1,
              type: 'dashed', //dotted:虚线 solid:实线
            },
          },
          axisLabel: {
            formatter: '{value}',
          },
        },
        series: this.yAxis,
      }
      charts.setOption(option, true)
      //清空画布,防止缓存
      charts.clear()
      //使用刚指定的配置项和数据显示图表。
      charts.setOption(option, true)
      window.addEventListener('resize', function () {
        charts.resize()
      })
    },
  },
}
</script>

在这里插入图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Vue中使用echarts甘特图,你可以按照以下步骤进行设置: 1. 首先,确保你已经在你的Vue项目中安装了echarts依赖。你可以通过运行命令`npm install echarts --save`来安装。 2. 在你的Vue项目的`main.js`文件中,添加以下代码来引入echarts: ``` import * as echarts from 'echarts' Vue.prototype.$echarts = echarts ``` 这样,你就可以在整个Vue项目中使用echarts了。 3. 接下来,你需要在你的Vue组件中使用echarts来创建甘特图。你可以通过在组件的`mounted`生命周期钩子函数里,使用`this.$echarts.init()`方法来初始化echarts实例,并且将该实例绑定到一个DOM元素上。然后,使用`setOption()`方法来设置甘特图数据和配置。以下是一个简单示例: ``` <template> <div id="gantt-chart" style="width: 100%; height: 400px;"></div> </template> <script> export default { mounted() { const chart = this.$echarts.init(document.getElementById('gantt-chart')) const option = { // 设置甘特图数据和配置 } chart.setOption(option) } } </script> ``` 在上面的示例中,我们将甘特图绑定到了一个ID为`gantt-chart`的DOM元素上,并且在`mounted`钩子函数中使用`this.$echarts.init()`方法初始化了echarts实例,并使用`setOption()`方法设置了甘特图数据和配置。你可以根据自己的需求,自定义甘特图数据和配置。 请注意,为了正确显示和使用甘特图,你可能还需要在Vue项目中引入echarts的样式文件。你可以在`main.js`文件中添加以下代码来引入echarts的样式: ``` import 'echarts/dist/echarts.css' ``` 这样,你就可以在Vue中使用echarts甘特图了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue+echarts甘特图](https://blog.csdn.net/feinifi/article/details/126687245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vueecharts实现甘特图](https://blog.csdn.net/weixin_44104341/article/details/85238205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值