Skip to content

Commit

Permalink
Merge pull request #3764 from apexcharts/feat/grouped-stacked-bars
Browse files Browse the repository at this point in the history
Feat/grouped stacked bars
  • Loading branch information
junedchhipa committed Apr 14, 2023
2 parents 6e4968a + c72ec66 commit d039987
Show file tree
Hide file tree
Showing 22 changed files with 1,255 additions and 134 deletions.
160 changes: 160 additions & 0 deletions samples/react/bar/grouped-stacked-bar.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Grouped Stacked Bar</title>

<link href="../../assets/styles.css" rel="stylesheet" />

<style>

#chart {
max-width: 650px;
margin: 35px auto;
}

</style>

<script>
window.Promise ||
document.write(
'<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"><\/script>'
)
window.Promise ||
document.write(
'<script src="https://cdn.jsdelivr.net/npm/eligrey-classlist-js-polyfill@1.2.20171210/classList.min.js"><\/script>'
)
window.Promise ||
document.write(
'<script src="https://cdn.jsdelivr.net/npm/findindex_polyfill_mdn"><\/script>'
)
</script>


<script src="https://cdn.jsdelivr.net/npm/react@16.12/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@16.12/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prop-types@15.7.2/prop-types.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"></script>
<script src="../../../dist/apexcharts.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-apexcharts@1.3.6/dist/react-apexcharts.iife.min.js"></script>


<script>
// Replace Math.random() with a pseudo-random number generator to get reproducible results in e2e tests
// Based on https://gist.github.com/blixt/f17b47c62508be59987b
var _seed = 42;
Math.random = function() {
_seed = _seed * 16807 % 2147483647;
return (_seed - 1) / 2147483646;
};
</script>


</head>

<body>

<div id="app"></div>

<div id="html">
&lt;div id=&quot;chart&quot;&gt;
&lt;ReactApexChart options={this.state.options} series={this.state.series} type=&quot;bar&quot; height={350} /&gt;
&lt;/div&gt;
</div>

<script type="text/babel">
class ApexChart extends React.Component {
constructor(props) {
super(props);

this.state = {

series: [
{
name: 'Q1 Budget',
group: 'budget',
data: [44000, 55000, 41000, 67000, 22000]
},
{
name: 'Q2 Budget',
group: 'budget',
data: [13000, 36000, 20000, 8000, 13000]
},
{
name: 'Q1 Actual',
group: 'actual',
data: [48000, 50000, 40000, 65000, 25000]
},
{
name: 'Q2 Actual',
group: 'actual',
data: [20000, 40000, 25000, 10000, 12000]
}
],
options: {
chart: {
type: 'bar',
height: 350,
stacked: true,
},
stroke: {
width: 1,
colors: ['#fff']
},
dataLabels: {
formatter: (val) => {
return val / 1000 + 'K'
}
},
plotOptions: {
bar: {
horizontal: true
}
},
xaxis: {
categories: [
'Online advertising',
'Sales Training',
'Print advertising',
'Catalogs',
'Meetings'
],
labels: {
formatter: (val) => {
return val / 1000 + 'K'
}
}
},
fill: {
opacity: 1
},
colors: ['#80c7fd', '#80f1cb', '#008FFB', '#00E396']
},


};
}



render() {
return (
<div>
<div id="chart">
<ReactApexChart options={this.state.options} series={this.state.series} type="bar" height={350} />
</div>
<div id="html-dist"></div>
</div>
);
}
}

const domContainer = document.querySelector('#app');
ReactDOM.render(React.createElement(ApexChart), domContainer);
</script>


</body>
</html>
163 changes: 163 additions & 0 deletions samples/react/column/grouped-stacked-column.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Grouped Stacked Column</title>

<link href="../../assets/styles.css" rel="stylesheet" />

<style>

#chart {
max-width: 650px;
margin: 35px auto;
}

</style>

<script>
window.Promise ||
document.write(
'<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"><\/script>'
)
window.Promise ||
document.write(
'<script src="https://cdn.jsdelivr.net/npm/eligrey-classlist-js-polyfill@1.2.20171210/classList.min.js"><\/script>'
)
window.Promise ||
document.write(
'<script src="https://cdn.jsdelivr.net/npm/findindex_polyfill_mdn"><\/script>'
)
</script>


<script src="https://cdn.jsdelivr.net/npm/react@16.12/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@16.12/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prop-types@15.7.2/prop-types.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"></script>
<script src="../../../dist/apexcharts.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-apexcharts@1.3.6/dist/react-apexcharts.iife.min.js"></script>


<script>
// Replace Math.random() with a pseudo-random number generator to get reproducible results in e2e tests
// Based on https://gist.github.com/blixt/f17b47c62508be59987b
var _seed = 42;
Math.random = function() {
_seed = _seed * 16807 % 2147483647;
return (_seed - 1) / 2147483646;
};
</script>


</head>

<body>

<div id="app"></div>

<div id="html">
&lt;div id=&quot;chart&quot;&gt;
&lt;ReactApexChart options={this.state.options} series={this.state.series} type=&quot;bar&quot; height={350} /&gt;
&lt;/div&gt;
</div>

<script type="text/babel">
class ApexChart extends React.Component {
constructor(props) {
super(props);

this.state = {

series: [
{
name: 'Q1 Budget',
group: 'budget',
data: [44000, 55000, 41000, 67000, 22000, 43000]
},
{
name: 'Q2 Budget',
group: 'budget',
data: [13000, 36000, 20000, 8000, 13000, 27000]
},
{
name: 'Q1 Actual',
group: 'actual',
data: [48000, 50000, 40000, 65000, 25000, 40000]
},
{
name: 'Q2 Actual',
group: 'actual',
data: [20000, 40000, 25000, 10000, 12000, 28000]
}
],
options: {
chart: {
type: 'bar',
height: 350,
stacked: true,
},
stroke: {
width: 1,
colors: ['#fff']
},
dataLabels: {
formatter: (val) => {
return val / 1000 + 'K'
}
},
plotOptions: {
bar: {
horizontal: false
}
},
xaxis: {
categories: [
'Online advertising',
'Sales Training',
'Print advertising',
'Catalogs',
'Meetings',
'Public relations'
]
},
fill: {
opacity: 1
},
colors: ['#80c7fd', '#80f1cb', '#008FFB', '#00E396'],
yaxis: {
labels: {
formatter: (val) => {
return val / 1000 + 'K'
}
}
}
},


};
}



render() {
return (
<div>
<div id="chart">
<ReactApexChart options={this.state.options} series={this.state.series} type="bar" height={350} />
</div>
<div id="html-dist"></div>
</div>
);
}
}

const domContainer = document.querySelector('#app');
ReactDOM.render(React.createElement(ApexChart), domContainer);
</script>


</body>
</html>
68 changes: 68 additions & 0 deletions samples/source/bar/grouped-stacked-bar.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<title>Grouped Stacked Bar</title>

<chart>
<options>
chart: {
type: 'bar',
height: 350,
stacked: true,
},
stroke: {
width: 1,
colors: ['#fff']
},
dataLabels: {
formatter: (val) => {
return val / 1000 + 'K'
}
},
plotOptions: {
bar: {
horizontal: true
}
},
xaxis: {
categories: [
'Online advertising',
'Sales Training',
'Print advertising',
'Catalogs',
'Meetings'
],
labels: {
formatter: (val) => {
return val / 1000 + 'K'
}
}
},
fill: {
opacity: 1
},
colors: ['#80c7fd', '#80f1cb', '#008FFB', '#00E396']
</options>

<series>
[
{
name: 'Q1 Budget',
group: 'budget',
data: [44000, 55000, 41000, 67000, 22000]
},
{
name: 'Q2 Budget',
group: 'budget',
data: [13000, 36000, 20000, 8000, 13000]
},
{
name: 'Q1 Actual',
group: 'actual',
data: [48000, 50000, 40000, 65000, 25000]
},
{
name: 'Q2 Actual',
group: 'actual',
data: [20000, 40000, 25000, 10000, 12000]
}
]
</series>
</chart>

0 comments on commit d039987

Please sign in to comment.