Vue implements horizontal beveled bar chart

Vue implements horizontal beveled bar chart

This article shares the specific code of Vue to implement horizontal beveled bar chart for your reference. The specific content is as follows

Result:

Implementation code:

<template>
  <div class="Consumption">
    <div style="width: 350px; height: 180px" ref="ConsumptionChart" />
  </div>
</template>
<script>
import echarts from 'echarts'
const myShape = {
  x: 0,
  y: 0,
  width: 10 // Spacing}
// Draw the left side const InclinedRoofBar = echarts.graphic.extendShape({
  shape: myShape,
  buildPath: function(ctx, shape) {
    // Anyone who knows canvas should be able to understand this. shape is passed in from custom const xAxisPoint = shape.xAxisPoint
    const c0 = [shape.x, shape.y]
    const c1 = [shape.x + 14, shape.y - 10]
    const c2 = [xAxisPoint[0], xAxisPoint[1] - 10]
    const c3 = [xAxisPoint[0], xAxisPoint[1]]
    ctx
      .moveTo(c0[0], c0[1])
      .lineTo(c1[0], c1[1])
      .lineTo(c2[0], c2[1])
      .lineTo(c3[0], c3[1])
      .closePath()
  }
})
const colors = ['rgba(50, 197, 255, 0.8)', 'rgba(0, 253, 255, 0.8)', 'rgba(255, 235, 0, 0.8)']
const colors = ['rgba(0, 145, 255, 1)', 'rgba(68, 215, 182, 1)', 'rgba(215, 170, 68, 1)']
// Register three surface graphics echarts.graphic.registerShape('InclinedRoofBar', InclinedRoofBar)
const defaultOption = {
  tooltip: {
    show: true,
    trigger: 'axis',
    axisPointer:
      type: 'shadow'
    }
  },
  grid: {
    top: 10,
    bottom: 30,
    left: 10,
    right: 10,
    containLabel: true
  },
  yAxis: {
    type: 'category',
    data: [],
    axisLine: {
      show:false
    },
    axisTick: {
      show:false
    },
    axisLabel: {
      color(value, index) {
        return colors[index]
      },
      fontSize: 14
    }
  },
  xAxis:
    type: 'value',
    axisLine: {
      show:false
    },
    min: 0,
    splitLine: {
      show:false
    },
    axisTick: {
      show:false
    },
    axisLabel: {
      show:false
    },
    boundaryGap: ['20%', '20%']
  },
  series: [
    {
      type: 'custom',
      name: '',
      itemStyle: {
        color: 'rgba(44, 197, 253, 1)'
      },
      renderItem: (params, api) => {
       const location = api.coord([api.value(0), api.value(1)])
        const xlocation = api.coord([0, api.value(1)])
        return {
          type: 'InclinedRoofBar',
          shape:
            api,
            xValue: api.value(0),
            yValue: api.value(1),
            x: location[0],
            y: location[1] + myShape.width,
            xAxisPoint: [xlocation[0], xlocation[1] + myShape.width]
          },
          style: {
            fill: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
              {
                offset: 0,
                color: colors[params.dataIndex]
              },
              {
                offset: 1,
                color: colorss[params.dataIndex]
              }
            ])
          }
        }
      },
      data: []
    },
    {
      type: 'bar',
      label: {
        normal: {
          show: true,
          position: 'right',
          fontSize: 14,
          offset: [15, 0]
        }
      },
      showBackground: false,
      barWidth: 14,
      backgroundStyle: {
        color: 'rgba(50, 197, 255, 0.1)'
      },
      itemStyle: {
        color: 'transparent'
      },
      tooltip: {
        show:false
      },
      data: []
    }
  ]
}
export default {
  data() {
    return {
      myChart: null
    }
  },
  mounted() {
    this.myChart = echarts.init(this.$refs.ConsumptionChart)
  },
  methods: {
    getOption(seriesData) {
      const option = defaultOption
      const { yAxis, series } = option
      // Process data yAxis.data = ['low', 'middle', 'high']
      series[0].data = seriesData
      series[1].data = seriesData.map((item, index) => Object.assign(item, { label: { color: colorss[index] } }))
      this.myChart.setOption(option)
    }
  }
}
</script>

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • Vue+Echart realizes three-dimensional column chart
  • Vue uses Echart icon plug-in bar chart
  • Detailed explanation of vue using Echarts to draw a bar chart
  • Vue+Echart bar chart realizes epidemic data statistics
  • Vue echarts realizes horizontal bar chart
  • Vue+echart realizes double column chart
  • Vue+echarts realizes stacked bar chart
  • Vue+echarts realizes progress bar histogram
  • Vue uses Echarts to implement a three-dimensional bar chart
  • Vue+ Antv F2 realizes stacked bar chart

<<:  Detailed tutorial on installing mysql 8.0.20 on CentOS7.8

>>:  Solve the problems that need to be paid attention to when configuring Tomcat's maxPostSize attribute

Recommend

Implementation of LNMP for separate deployment of Docker containers

1. Environmental Preparation The IP address of ea...

Detailed explanation of the frame and rules attributes of the table in HTML

The frame and rules attributes of the table tag c...

js native waterfall flow plug-in production

This article shares the specific code of the js n...

Mini Program to Implement Calculator Function

This article example shares the specific code of ...

How to use docker to build redis master-slave

1. Build a Docker environment 1. Create a Dockerf...

Solution for Vue routing this.route.push jump page not refreshing

Vue routing this.route.push jump page does not re...

Explain the difference between iframe and frame in HTML with examples

I don't know if you have used the frameset at...

MySQL data insertion efficiency comparison

When inserting data, I found that I had never con...

How to Install Oracle Java 14 on Ubuntu Linux

Recently, Oracle announced the public availabilit...

HTML table markup tutorial (2): table border attributes BORDER

By default, the border of the table is 0, and we ...

Detailed explanation of JSON.parse and JSON.stringify usage

Table of contents JSON.parse JSON.parse Syntax re...