Convert Figma logo to code with AI

apexcharts logovue-apexcharts

πŸ“Š Vue 2 component for ApexCharts

1,333
135
1,333
39

Top Related Projects

πŸ“Š Vue.js wrapper for Chart.js

基于 Vue2.0 ε’Œ ECharts ε°θ£…ηš„ε›Ύθ‘¨η»„δ»ΆπŸ“ˆπŸ“Š

πŸ“Š Re-usable, easy interface JavaScript chart library based on D3.js

23,884

Redefined chart library built with React and D3

Quick Overview

Vue-ApexCharts is a Vue.js wrapper for ApexCharts, a modern charting library that helps developers create interactive and responsive charts. It provides a simple and intuitive API for creating various types of charts, including line, area, bar, pie, and more, with minimal configuration.

Pros

  • Easy integration with Vue.js projects
  • Wide variety of chart types and customization options
  • Responsive and interactive charts out of the box
  • Good documentation and examples

Cons

  • Learning curve for advanced customizations
  • Large bundle size when using all chart types
  • Limited support for real-time data updates
  • Some features may require additional configuration

Code Examples

  1. Creating a basic line chart:
<template>
  <apexchart type="line" :options="chartOptions" :series="series" />
</template>

<script>
export default {
  data() {
    return {
      chartOptions: {
        chart: {
          id: 'basic-line'
        },
        xaxis: {
          categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998]
        }
      },
      series: [{
        name: 'series-1',
        data: [30, 40, 35, 50, 49, 60, 70, 91]
      }]
    }
  }
}
</script>
  1. Creating a pie chart:
<template>
  <apexchart type="pie" :options="chartOptions" :series="series" />
</template>

<script>
export default {
  data() {
    return {
      chartOptions: {
        labels: ['Team A', 'Team B', 'Team C', 'Team D', 'Team E']
      },
      series: [44, 55, 13, 43, 22]
    }
  }
}
</script>
  1. Updating chart data dynamically:
<template>
  <div>
    <apexchart ref="chart" type="bar" :options="chartOptions" :series="series" />
    <button @click="updateChart">Update Chart</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      chartOptions: {
        chart: {
          id: 'dynamic-bar'
        },
        xaxis: {
          categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May']
        }
      },
      series: [{
        name: 'Sales',
        data: [30, 40, 35, 50, 49]
      }]
    }
  },
  methods: {
    updateChart() {
      const newData = [Math.random() * 100, Math.random() * 100, Math.random() * 100, Math.random() * 100, Math.random() * 100];
      this.$refs.chart.updateSeries([{
        data: newData
      }]);
    }
  }
}
</script>

Getting Started

  1. Install the package:
npm install vue-apexcharts apexcharts
  1. Import and use in your Vue.js application:
import Vue from 'vue'
import VueApexCharts from 'vue-apexcharts'

Vue.use(VueApexCharts)
Vue.component('apexchart', VueApexCharts)
  1. Use the component in your Vue template:
<template>
  <apexchart type="line" :options="chartOptions" :series="series" />
</template>

Competitor Comparisons

πŸ“Š Vue.js wrapper for Chart.js

Pros of vue-chartjs

  • Lightweight and simple to use, with a focus on Chart.js integration
  • Provides reactive mixins for easy data updates
  • Well-documented with clear examples and tutorials

Cons of vue-chartjs

  • Limited to Chart.js functionality, less feature-rich compared to ApexCharts
  • Fewer chart types and customization options available
  • May require more manual configuration for complex visualizations

Code Comparison

vue-chartjs:

import { Line, mixins } from 'vue-chartjs'

export default {
  extends: Line,
  mixins: [mixins.reactiveProp],
  mounted() {
    this.renderChart(this.chartData, this.options)
  }
}

vue-apexcharts:

<template>
  <apexchart type="line" :options="chartOptions" :series="series"></apexchart>
</template>

<script>
export default {
  data: () => ({
    chartOptions: { ... },
    series: [{ ... }]
  })
}
</script>

vue-chartjs is more focused on Chart.js integration, offering a simpler API but with fewer features. vue-apexcharts provides a wider range of chart types and customization options, making it more suitable for complex visualizations. The code comparison shows that vue-chartjs requires extending a base component and using mixins, while vue-apexcharts uses a more declarative approach with props.

基于 Vue2.0 ε’Œ ECharts ε°θ£…ηš„ε›Ύθ‘¨η»„δ»ΆπŸ“ˆπŸ“Š

Pros of v-charts

  • Built on top of ECharts, offering a wide range of chart types and customization options
  • Provides a more Vue-like API, making it easier for Vue developers to integrate
  • Offers automatic resizing and responsive design out of the box

Cons of v-charts

  • Less active development and community support compared to vue-apexcharts
  • Limited documentation and examples in English
  • Slightly larger bundle size due to ECharts dependency

Code Comparison

v-charts:

<template>
  <ve-line :data="chartData"></ve-line>
</template>

<script>
export default {
  data: () => ({
    chartData: {
      columns: ['date', 'sales'],
      rows: [
        { date: '2018-05-22', sales: 32 },
        { date: '2018-05-23', sales: 63 },
        { date: '2018-05-24', sales: 51 }
      ]
    }
  })
}
</script>

vue-apexcharts:

<template>
  <apexchart type="line" :options="chartOptions" :series="series"></apexchart>
</template>

<script>
export default {
  data: () => ({
    chartOptions: {
      xaxis: { categories: ['2018-05-22', '2018-05-23', '2018-05-24'] }
    },
    series: [{ name: 'sales', data: [32, 63, 51] }]
  })
}
</script>

πŸ“Š Re-usable, easy interface JavaScript chart library based on D3.js

Pros of billboard.js

  • More lightweight and faster rendering compared to vue-apexcharts
  • Broader browser compatibility, including older versions
  • Extensive documentation and examples for various chart types

Cons of billboard.js

  • Less customization options for advanced chart designs
  • Fewer built-in animations and interactivity features
  • Steeper learning curve for beginners due to its API structure

Code Comparison

billboard.js:

var chart = bb.generate({
  bindto: "#chart",
  data: {
    columns: [
      ["data1", 30, 200, 100, 400, 150, 250],
      ["data2", 50, 20, 10, 40, 15, 25]
    ],
    type: "line"
  }
});

vue-apexcharts:

<template>
  <apexchart type="line" :options="chartOptions" :series="series" />
</template>

<script>
export default {
  data: () => ({
    chartOptions: { /* ... */ },
    series: [{ data: [30, 200, 100, 400, 150, 250] }]
  })
}
</script>

Both libraries offer powerful charting capabilities, but billboard.js focuses on performance and compatibility, while vue-apexcharts provides a more Vue-friendly integration with enhanced customization options.

23,884

Redefined chart library built with React and D3

Pros of recharts

  • Built specifically for React, offering seamless integration and performance optimization
  • Highly customizable with a declarative API, allowing for complex chart configurations
  • Extensive documentation and examples, making it easier for developers to implement

Cons of recharts

  • Limited chart types compared to vue-apexcharts
  • Steeper learning curve for developers new to React or D3.js concepts
  • Less out-of-the-box interactivity features, requiring more custom implementation

Code Comparison

recharts:

import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts';

<LineChart width={600} height={300} data={data}>
  <Line type="monotone" dataKey="pv" stroke="#8884d8" />
  <CartesianGrid stroke="#ccc" />
  <XAxis dataKey="name" />
  <YAxis />
  <Tooltip />
  <Legend />
</LineChart>

vue-apexcharts:

<template>
  <apexchart type="line" :options="chartOptions" :series="series"></apexchart>
</template>

<script>
export default {
  data: () => ({
    chartOptions: { /* chart options */ },
    series: [{ data: [/* data points */] }]
  })
}
</script>

Both libraries offer powerful charting capabilities, but recharts is more React-centric and declarative, while vue-apexcharts provides a more concise API with Vue-specific optimizations.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

License build ver

Vue.js wrapper for ApexCharts to build interactive visualizations in vue.

Download and Installation

Installing via npm
npm install --save apexcharts
npm install --save vue-apexcharts

If you're looking for Vue 3.x.x compatibile component, check-out vue3-apexcharts

Usage

import VueApexCharts from 'vue-apexcharts'
Vue.use(VueApexCharts)

Vue.component('apexchart', VueApexCharts)

To create a basic bar chart with minimal configuration, write as follows:

<template>
   <div>
     <apexchart width="500" type="bar" :options="chartOptions" :series="series"></apexchart>
   </div>
</template>

export default {
    data: function() {
      return {
        chartOptions: {
          chart: {
            id: 'vuechart-example'
          },
          xaxis: {
            categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998]
          }
        },
        series: [{
          name: 'series-1',
          data: [30, 40, 35, 50, 49, 60, 70, 91]
        }]
      }
    },
};

This will render the following chart

How do I update the chart?

Simple! Just change the series or any option and it will automatically re-render the chart.
Click on the below example to see this in action

<template>
   <div class="app">
     <apexchart width="550" type="bar" :options="chartOptions" :series="series"></apexchart>
     <div>
       <button @click="updateChart">Update!</button>
    </div>
   </div>

</template>
export default {
    data: function() {
      return {
        chartOptions: {
          chart: {
            id: 'vuechart-example',
          },
          xaxis: {
            categories: [1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998],
          },
        },
        series: [{
          name: 'series-1',
          data: [30, 40, 45, 50, 49, 60, 70, 81]
        }]
      }
    },
    methods: {
      updateChart() {
        const max = 90;
        const min = 20;
        const newData = this.series[0].data.map(() => {
          return Math.floor(Math.random() * (max - min + 1)) + min
        })

        const colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']

        // Make sure to update the whole options config and not just a single property to allow the Vue watch catch the change.
        this.chartOptions = {
          colors: [colors[Math.floor(Math.random()*colors.length)]]
        };
        // In the same way, update the series option
        this.series = [{
          data: newData
        }]
      }
    }
};

Important: While updating the options, make sure to update the outermost property even when you need to update the nested property.

Γ’ΒœΒ… Do this

this.chartOptions = {...this.chartOptions, ...{
    xaxis: {
        labels: {
           style: {
             colors: ['red']
           }
        }
    }
}}

ҝŒ Not this

this.chartOptions.xaxis = {
    labels: {
        style: {
          colors: ['red']
        }
    }
}}

Props

PropTypeDescription
series*ArrayThe series is an array which accepts an object in the following format. To know more about the format of dataSeries, checkout Series docs on the website.
type*Stringline, area, bar, pie, donut, scatter, bubble, heatmap, radialBar, candlestick
widthNumber/StringPossible values for width can be 100% or 400px or 400
heightNumber/StringPossible values for height can be 100% or 300px or 300
optionsObjectThe configuration object, see options on API (Reference)

Methods

You don't actually need to call updateSeries() or updateOptions() manually. Changing the props will automatically update the chart. You only need to call these methods to update the chart forcefully.

MethodDescription
updateSeriesAllows you to update the series array overriding the existing one
updateOptionsAllows you to update the configuration object
toggleSeriesAllows you to toggle the visibility of series programatically. Useful when you have custom legend.
appendDataAllows you to append new data to the series array.
addTextThe addText() method can be used to draw text after chart is rendered.
addXaxisAnnotationDraw x-axis annotations after chart is rendered.
addYaxisAnnotationDraw y-axis annotations after chart is rendered.
addPointAnnotationDraw point (xy) annotations after chart is rendered.

How to call the methods mentioned above?

<template>
  <div class="example">
    <apexchart ref="demoChart" width="500" :options="chartOptions" :series="series"></apexchart>
  </div>
</template>

<script>
  functionName: function() {
    this.$refs.demoChart.updateOptions({ colors: newColors })
  },
</script>

How to call methods of ApexCharts without referencing the chart element?

Sometimes, you may want to call methods of the core ApexCharts library from some other place, and you can do so on this.$apexcharts global variable directly. You need to target the chart by chart.id while calling this method

Example

this.$apexcharts.exec('vuechart-example', 'updateSeries', [{
  data: [40, 55, 65, 11, 23, 44, 54, 33]
}])

In the above method, vuechart-example is the ID of chart, updateSeries is the name of the method you want to call and the third parameter is the new Series you want to update.

More info on the .exec() method can be found here

All other methods of ApexCharts can be called the same way.

What's included

The repository includes the following files and directories.

vue-apexcharts/
Γ’Β”ΒœΓ’Β”Β€Γ’Β”Β€ dist/
Ҕ‚   Ҕ”Ò”€Ò”€ vue-apexcharts.js
Ҕ”Ò”€Ò”€ src/
    Γ’Β”ΒœΓ’Β”Β€Γ’Β”Β€ ApexCharts.component.js
    Γ’Β”ΒœΓ’Β”Β€Γ’Β”Β€ Utils.js
    Ҕ”Ò”€Ò”€ index.js

Running the examples

Basic Examples are included to show how to get started using ApexCharts with Vue easily.

To run the examples,

cd example
npm install
npm run serve

Development

Install dependencies

npm install

Bundling

npm run build

Supporting ApexCharts

ApexCharts is an open source project.
You can help by becoming a sponsor on Patreon or doing a one time donation on PayPal

Become a Patron

License

Vue-ApexCharts is released under MIT license. You are free to use, modify and distribute this software, as long as the copyright header is left intact.

NPM DownloadsLast 30 Days