Pies with Equal Sizes
To display multiple PieChart components that share series and legend settings, you can use the map method to iterate through every PieChart option.
When you display PieChart components side by side, their pies may differ in size. You can join all charts into a size group to resize these pies to match each other. To do so, set the sizeGroup property of every chart to the same value.
Feel free to share demo-related thoughts here.
If you have technical questions, please create a support ticket in the DevExpress Support Center.
Thank you for the feedback!
If you have technical questions, please create a support ticket in the DevExpress Support Center.
Backend API
import React from 'react';
import PieChart, {
Series,
Label,
Legend,
IPieChartOptions,
} from 'devextreme-react/pie-chart';
import { countries, waterLandRatio } from './data.ts';
const pieCharts: {
title: string,
palette: IPieChartOptions['palette'],
dataSource: {
name: string,
area: number,
}[],
}[] = [{
title: 'Area of Countries',
palette: 'Soft',
dataSource: countries,
}, {
title: 'Water/Land Ratio',
palette: 'Soft Pastel',
dataSource: waterLandRatio,
}];
function App() {
const pies = pieCharts.map((options, i) => (
<PieChart
className="pie"
key={i}
title={options.title}
palette={options.palette}
sizeGroup="piesGroup"
dataSource={options.dataSource}
>
<Series argumentField="name" valueField="area">
<Label visible={true} format="percent" />
</Series>
<Legend
verticalAlignment="bottom"
horizontalAlignment="center"
itemTextPosition="right"
rowCount={2}
/>
</PieChart>
));
return (
<div className="pies-container">
{pies}
</div>
);
}
export default App;
import React from 'react';
import PieChart, { Series, Label, Legend } from 'devextreme-react/pie-chart';
import { countries, waterLandRatio } from './data.js';
const pieCharts = [
{
title: 'Area of Countries',
palette: 'Soft',
dataSource: countries,
},
{
title: 'Water/Land Ratio',
palette: 'Soft Pastel',
dataSource: waterLandRatio,
},
];
function App() {
const pies = pieCharts.map((options, i) => (
<PieChart
className="pie"
key={i}
title={options.title}
palette={options.palette}
sizeGroup="piesGroup"
dataSource={options.dataSource}
>
<Series
argumentField="name"
valueField="area"
>
<Label
visible={true}
format="percent"
/>
</Series>
<Legend
verticalAlignment="bottom"
horizontalAlignment="center"
itemTextPosition="right"
rowCount={2}
/>
</PieChart>
));
return <div className="pies-container">{pies}</div>;
}
export default App;
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(
<App />,
document.getElementById('app'),
);
export const waterLandRatio = [{
name: 'Land',
area: 0.29,
}, {
name: 'Water',
area: 0.71,
}];
export const countries = [{
name: 'Russia',
area: 0.12,
}, {
name: 'Canada',
area: 0.07,
}, {
name: 'USA',
area: 0.07,
}, {
name: 'China',
area: 0.07,
}, {
name: 'Brazil',
area: 0.06,
}, {
name: 'Australia',
area: 0.05,
}, {
name: 'India',
area: 0.02,
}, {
name: 'Others',
area: 0.55,
}];
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,
},
},
paths: {
'npm:': 'https://unpkg.com/',
},
defaultExtension: 'js',
map: {
'ts': 'npm:plugin-typescript@4.2.4/lib/plugin.js',
'typescript': 'npm:typescript@4.2.4/lib/typescript.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@15.8.1/prop-types.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@1.28.1/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign@1.1.0',
'devextreme': 'npm:devextreme@23.2.5/cjs',
'devextreme-react': 'npm:devextreme-react@23.2.5/cjs',
'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js',
'devextreme-quill': 'npm:devextreme-quill@1.6.4/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.51/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@7.4.11/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.4/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.4/parser-html.js',
},
packages: {
'devextreme': {
defaultExtension: 'js',
},
'devextreme-react': {
main: 'index.js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/localization/messages': {
format: 'json',
defaultExtension: '',
},
'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);
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
export const waterLandRatio = [
{
name: 'Land',
area: 0.29,
},
{
name: 'Water',
area: 0.71,
},
];
export const countries = [
{
name: 'Russia',
area: 0.12,
},
{
name: 'Canada',
area: 0.07,
},
{
name: 'USA',
area: 0.07,
},
{
name: 'China',
area: 0.07,
},
{
name: 'Brazil',
area: 0.06,
},
{
name: 'Australia',
area: 0.05,
},
{
name: 'India',
area: 0.02,
},
{
name: 'Others',
area: 0.55,
},
];
<!DOCTYPE html>
<html>
<head>
<title>DevExtreme Demo</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/23.2.5/css/dx.light.css" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<script src="https://unpkg.com/core-js@2.6.12/client/shim.min.js"></script>
<script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script>
<script type="text/javascript" src="config.js"></script>
<script type="text/javascript">
System.import("./index.tsx");
</script>
</head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
.pies-container {
margin: auto;
width: 800px;
}
.pies-container > .pie {
width: 400px;
float: left;
}