If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React from 'react';
import {
Chart, ChartTypes, Series, CommonSeriesSettings, Label, Format, Legend, Export,
} from 'devextreme-react/chart';
import { grossProductData } from './data.ts';
function onPointClick(e: ChartTypes.PointClickEvent) {
e.target.select();
}
function App() {
return (
<Chart id="chart"
title="Gross State Product within the Great Lakes Region"
dataSource={grossProductData}
onPointClick={onPointClick}
>
<CommonSeriesSettings
argumentField="state"
type="bar"
hoverMode="allArgumentPoints"
selectionMode="allArgumentPoints"
>
<Label visible={true}>
<Format type="fixedPoint" precision={0} />
</Label>
</CommonSeriesSettings>
<Series
argumentField="state"
valueField="year2018"
name="2018"
/>
<Series
valueField="year2017"
name="2017"
/>
<Series
valueField="year2016"
name="2016"
/>
<Legend verticalAlignment="bottom" horizontalAlignment="center"></Legend>
<Export enabled={true} />
</Chart>
);
}
export default App;
xxxxxxxxxx
import React from 'react';
import {
Chart,
Series,
CommonSeriesSettings,
Label,
Format,
Legend,
Export,
} from 'devextreme-react/chart';
import { grossProductData } from './data.js';
function onPointClick(e) {
e.target.select();
}
function App() {
return (
<Chart
id="chart"
title="Gross State Product within the Great Lakes Region"
dataSource={grossProductData}
onPointClick={onPointClick}
>
<CommonSeriesSettings
argumentField="state"
type="bar"
hoverMode="allArgumentPoints"
selectionMode="allArgumentPoints"
>
<Label visible={true}>
<Format
type="fixedPoint"
precision={0}
/>
</Label>
</CommonSeriesSettings>
<Series
argumentField="state"
valueField="year2018"
name="2018"
/>
<Series
valueField="year2017"
name="2017"
/>
<Series
valueField="year2016"
name="2016"
/>
<Legend
verticalAlignment="bottom"
horizontalAlignment="center"
></Legend>
<Export enabled={true} />
</Chart>
);
}
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 grossProductData = [{
state: 'Illinois',
year2016: 803,
year2017: 823,
year2018: 863,
}, {
state: 'Indiana',
year2016: 316,
year2017: 332,
year2018: 332,
}, {
state: 'Michigan',
year2016: 452,
year2017: 459,
year2018: 470,
}, {
state: 'Ohio',
year2016: 621,
year2017: 642,
year2018: 675,
}, {
state: 'Wisconsin',
year2016: 290,
year2017: 294,
year2018: 301,
}];
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 grossProductData = [
{
state: 'Illinois',
year2016: 803,
year2017: 823,
year2018: 863,
},
{
state: 'Indiana',
year2016: 316,
year2017: 332,
year2018: 332,
},
{
state: 'Michigan',
year2016: 452,
year2017: 459,
year2018: 470,
},
{
state: 'Ohio',
year2016: 621,
year2017: 642,
year2018: 675,
},
{
state: 'Wisconsin',
year2016: 290,
year2017: 294,
year2018: 301,
},
];
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
#chart {
height: 440px;
}
Bind to Data
In this demo, series is bound to data directly. See the Bind Series to Data article for information. The "state" field name is assigned to the argumentField property of the commonSeriesSettings object since the bar chart contains series with the same argument field.
Specify Common Series Settings
To configure settings for all series in the chart, use the commonSeriesSettings object.
You can configure the following series settings:
- The series type
- Selection mode
- Hover mode
- Change point labels' visibility and format.
Customize Side by Side Chart
Use the verticalAlignment and horizontalAlignment properties of the legend object to specify the legend position in the chart.
You can also handle a series point selection in the pointClick event.
To allow a user to export your bar chart into the PNG, JPEG, and SVG file or print the chart, set the export.enabled property to true. In this demo, the exporting is enabled and you can click the "Exporting/Printing" button in the side by side bar chart. This button invokes a drop-down menu with export and print commands.