Skip to content

Enable rendering negative area chart with lines of any color #5002

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 151 additions & 0 deletions samples/react/area/area-with-negative-and-lines.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
<!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>Area with different negative color</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/[email protected]/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/[email protected]/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/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/[email protected]/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={state.options} series={state.series} type=&quot;area&quot;
height={350} /&gt; &lt;/div&gt;
</div>

<script type="text/babel">
const ApexChart = () => {
const [state, setState] = React.useState({
series: [
{
data: [0, -41, 35, -51, 0, 62, -69, 32, -32, 54, 16, -50],
type: 'area',
color: '#ff0000',
},
{
data: [1, 10, 20, -10, -15, -20, -30, 22, 60, 30, 36, 45],
type: 'line',
color: '#0000FF',
},
{
data: [-15, -25, -40, -10, 15, 40, 59, 32, 0, -30, 36, 45],
type: 'line',
color: '#000000',
},
],
options: {
chart: {
height: 350,
type: 'area',
zoom: {
enabled: false,
},
},
dataLabels: {
enabled: false,
},
title: {
text: 'Negative color for values less than 0',
align: 'left',
},
xaxis: {
categories: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
],
},
stroke: {
width: [0, 2, 2],
},
fill: {
opacity: 1,
type: 'solid',
},
plotOptions: {
line: {
// Add new prop to define which series the plot option should be applied.
enabledOnSeries: [0],
colors: {
threshold: 0,
colorAboveThreshold: '#00FF00',
colorBelowThreshold: '#ff0000',
},
},
},
},
})

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

const domContainer = document.querySelector('#app')
ReactDOM.render(<ApexChart />, domContainer)
</script>
</body>
</html>
6 changes: 5 additions & 1 deletion src/modules/Fill.js
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,11 @@ class Fill {

const drawMultiColorLine =
cnf.plotOptions.line.colors.colorAboveThreshold &&
cnf.plotOptions.line.colors.colorBelowThreshold
cnf.plotOptions.line.colors.colorBelowThreshold &&
// undefined enabledOnSeries means enabled on all series.
(!cnf.plotOptions.line.enabledOnSeries ||
(Array.isArray(cnf.plotOptions.line.enabledOnSeries) &&
cnf.plotOptions.line.enabledOnSeries.indexOf(this.seriesIndex) >= 0))

let fillColors = this.getFillColors()
let fillColor = fillColors[this.seriesIndex]
Expand Down
1 change: 1 addition & 0 deletions types/apexcharts.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@ type ApexLocale = {
*/
type ApexPlotOptions = {
line?: {
enabledOnSeries?: undefined | number[]
isSlopeChart?: boolean
colors?: {
threshold?: number,
Expand Down