<template>
  <div>
    <div>
      <div class="chart-wrap">
        <div id="chart">
          <apexchart
            type="donut"
            width="380"
            :options="chartOptions"
            :series="series"
          ></apexchart>
        </div>
      </div>

      <div class="actions">
        <button @click="appendData">+ ADD</button>

        <button @click="removeData">- REMOVE</button>

        <button @click="randomize">RANDOMIZE</button>

        <button @click="reset">RESET</button>
      </div>
    </div>
  </div>
</template>

<script>
import VueApexCharts from 'vue-apexcharts'

export default {
components: {
apexchart: VueApexCharts,
},
data: function () {
return {
series: [44, 55, 13, 33],
chartOptions: {
chart: {
  width: 380,
  type: 'donut',
},
labels: ['Stocks', 'Bonds', 'Real Estate', 'Cash'],
title: {
  text: 'Portfolio Allocation'
},
dataLabels: {
  enabled: false
},
responsive: [{
  breakpoint: 480,
  options: {
    chart: {
      width: 200
    },
    legend: {
      show: false
    }
  }
}],
legend: {
  position: 'right',
  offsetY: 0,
  height: 230,
}
},
}
},
methods: {
  appendData: function () {
    var arr = this.series.slice()
    arr.push(Math.floor(Math.random() * (100 - 1 + 1)) + 1)
    this.series = arr
  },

  removeData: function () {
    if(this.series.length === 1) return
    var arr = this.series.slice()
    arr.pop()
    this.series = arr
  },

  randomize: function () {
    this.series = this.series.map(function() {
      return Math.floor(Math.random() * (100 - 1 + 1)) + 1
    })
  },

  reset: function () {
    this.series = [44, 55, 13, 33]
  }
},,
}
</script>

<style>
#chart {
  max-width: 480px;
  margin: 35px auto;
  padding: 0;
}
.actions {
  top: -10px;
  position: relative;
  z-index: 10;
  max-width: 400px;
  margin: 0 auto;
}
button {
  color: #fff;
  background: #20b2aa;
  padding: 5px 10px;
  margin: 2px;
  font-weight: bold;
  font-size: 13px;
  border-radius: 5px;
}
p {
  margin: 10px 0;
}
@media only screen and (max-width: 480px) {
  .actions {
    margin-top: 0;
    left: 0;
  }
}
</style>
Donut Update - Vue Pie / Donut Charts | ApexCharts.js | ApexCharts.js