If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React, { useCallback, useState } from 'react';
import SelectBox, { SelectBoxTypes } from 'devextreme-react/select-box';
import {
Chart,
Series,
ArgumentAxis,
CommonSeriesSettings,
Export,
Legend,
Margin,
ChartTypes,
} from 'devextreme-react/chart';
import { dataSource, seriesTypeLabel } from './data.ts';
const types: ChartTypes.SeriesType[] = ['area', 'stackedarea', 'fullstackedarea'];
function App() {
const [type, setType] = useState<ChartTypes.SeriesType>(types[0]);
const handleChange = useCallback((e: SelectBoxTypes.ValueChangedEvent) => {
setType(e.value);
}, [setType]);
return (
<div id="chart-demo">
<Chart
palette="Harmony Light"
title="Population: Age Structure (2018)"
dataSource={dataSource}
>
<CommonSeriesSettings
argumentField="country"
type={type}
/>
<Series valueField="y1564" name="15-64 years"></Series>
<Series valueField="y014" name="0-14 years"></Series>
<Series valueField="y65" name="65 years and older"></Series>
<Margin bottom={20} />
<ArgumentAxis valueMarginsEnabled={false} />
<Legend
verticalAlignment="bottom"
horizontalAlignment="center"
/>
<Export enabled={true} />
</Chart>
<div className="options">
<div className="caption">Options</div>
<div className="option">
<span>Series Type </span>
<SelectBox
dataSource={types}
value={type}
inputAttr={seriesTypeLabel}
onValueChanged={handleChange}
/>
</div>
</div>
</div>
);
}
export default App;
xxxxxxxxxx
import React, { useCallback, useState } from 'react';
import SelectBox from 'devextreme-react/select-box';
import {
Chart,
Series,
ArgumentAxis,
CommonSeriesSettings,
Export,
Legend,
Margin,
} from 'devextreme-react/chart';
import { dataSource, seriesTypeLabel } from './data.js';
const types = ['area', 'stackedarea', 'fullstackedarea'];
function App() {
const [type, setType] = useState(types[0]);
const handleChange = useCallback(
(e) => {
setType(e.value);
},
[setType],
);
return (
<div id="chart-demo">
<Chart
palette="Harmony Light"
title="Population: Age Structure (2018)"
dataSource={dataSource}
>
<CommonSeriesSettings
argumentField="country"
type={type}
/>
<Series
valueField="y1564"
name="15-64 years"
></Series>
<Series
valueField="y014"
name="0-14 years"
></Series>
<Series
valueField="y65"
name="65 years and older"
></Series>
<Margin bottom={20} />
<ArgumentAxis valueMarginsEnabled={false} />
<Legend
verticalAlignment="bottom"
horizontalAlignment="center"
/>
<Export enabled={true} />
</Chart>
<div className="options">
<div className="caption">Options</div>
<div className="option">
<span>Series Type </span>
<SelectBox
dataSource={types}
value={type}
inputAttr={seriesTypeLabel}
onValueChanged={handleChange}
/>
</div>
</div>
</div>
);
}
export default App;
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(
<App />,
document.getElementById('app'),
);
xxxxxxxxxx
export const dataSource = [{
country: 'China',
y014: 233866959,
y1564: 1170914102,
y65: 171774113,
}, {
country: 'India',
y014: 373419115,
y1564: 882520945,
y65: 76063757,
}, {
country: 'United States',
y014: 60554755,
y1564: 213172625,
y65: 54835293,
}, {
country: 'Indonesia',
y014: 65715705,
y1564: 177014815,
y65: 18053690,
}, {
country: 'Brazil',
y014: 45278034,
y1564: 144391494,
y65: 17190842,
}, {
country: 'Russia',
y014: 24465156,
y1564: 96123777,
y65: 20412243,
}];
export const seriesTypeLabel = { 'aria-label': 'Series Type' };
xxxxxxxxxx
window.exports = window.exports || {};
window.config = {
transpiler: 'ts',
typescriptOptions: {
module: 'system',
emitDecoratorMetadata: true,
experimentalDecorators: true,
jsx: 'react',
},
meta: {
'react': {
'esModule': true,
},
'typescript': {
'exports': 'ts',
},
'devextreme/time_zone_utils.js': {
'esModule': true,
},
'devextreme/localization.js': {
'esModule': true,
},
'devextreme/viz/palette.js': {
'esModule': true,
},
'openai': {
'esModule': true,
},
},
paths: {
'npm:': 'https://unpkg.com/',
'bundles:': 'bundles/',
'externals:': 'bundles/externals/',
},
defaultExtension: 'js',
map: {
'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js',
'typescript': 'npm:typescript@4.2.4/lib/typescript.js',
'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js',
'react': 'npm:react@17.0.2/umd/react.development.js',
'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js',
'prop-types': 'npm:prop-types/prop-types.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign',
'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs',
'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs',
'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/dist/dx-gantt.js',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12',
'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js',
'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js',
'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js',
'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js',
'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js',
'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js',
'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js',
'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js',
'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3',
// SystemJS plugins
'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js',
'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js',
// Prettier
'prettier/standalone': 'npm:prettier@2.8.8/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js',
},
packages: {
'devextreme': {
defaultExtension: 'js',
},
'devextreme-react': {
main: 'index.js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/localization/messages': {
format: 'json',
defaultExtension: 'json',
},
'devextreme/events': {
main: 'index',
},
'es6-object-assign': {
main: './index.js',
defaultExtension: 'js',
},
},
packageConfigPaths: [
'npm:@devextreme/*/package.json',
'npm:@devextreme/runtime@3.0.12/inferno/package.json',
],
babelOptions: {
sourceMaps: false,
stage0: true,
react: true,
},
};
System.config(window.config);
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
xxxxxxxxxx
export const dataSource = [
{
country: 'China',
y014: 233866959,
y1564: 1170914102,
y65: 171774113,
},
{
country: 'India',
y014: 373419115,
y1564: 882520945,
y65: 76063757,
},
{
country: 'United States',
y014: 60554755,
y1564: 213172625,
y65: 54835293,
},
{
country: 'Indonesia',
y014: 65715705,
y1564: 177014815,
y65: 18053690,
},
{
country: 'Brazil',
y014: 45278034,
y1564: 144391494,
y65: 17190842,
},
{
country: 'Russia',
y014: 24465156,
y1564: 96123777,
y65: 20412243,
},
];
export const seriesTypeLabel = { 'aria-label': 'Series Type' };
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
.options {
padding: 20px;
background-color: rgba(191, 191, 191, 0.15);
margin-top: 20px;
}
.option {
margin-top: 10px;
}
.caption {
font-size: 18px;
font-weight: 500;
}
.option > span {
margin-right: 10px;
}
.option > .dx-widget {
display: inline-block;
vertical-align: middle;
}
-
area
The Area series draws the line between neighboring data points and fills the area under that line. If the Chart contains multiple area series, they overlap each other. -
stackedarea
The Chart displays areas stacked on top of each other without overlapping. This type of Chart is useful if you need to compare contributions of each series to the overall value. -
fullstackedarea
The Chart stacks the areas. For each argument, it displays values as percentages of the total, as opposed to absolute values. The topmost series points are always plotted at 100%, and the graph fully covers the Chart's pane.
To create multiple area series, use the series array to declare each series and the commonSeriesSettings object to specify the common series type.