Help us shape the 2021 DevExtreme Roadmap. Take our 5 minute survey.
Your search did not match any results.
Funnel and Pyramid Charts

Pyramid Chart


The DevExtreme HTML5 JavaScript Pyramid Chart is often used to visualize an organizational structure. In this demo, the pyramid displays a team’s composition, reflecting both subordination and strength. In code, the pyramid is created using the Funnel UI component with the algorithm property set to «dynamicHeight» and inverted property set to true.

Copy to CodeSandBox
<template> <DxFunnel id="pyramid" :data-source="dataSource" :sort-data="false" :inverted="true" algorithm="dynamicHeight" palette="Harmony Light" argument-field="level" value-field="count" > <DxTitle text="Team Composition"> <DxMargin :bottom="30"/> </DxTitle> <DxTooltip :enabled="true"/> <DxItem> <DxBorder :visible="true"/> </DxItem> <DxLegend :visible="true"/> <DxLabel :visible="true" horizontal-alignment="left" background-color="none" > <DxFont :size="16"/> </DxLabel> </DxFunnel> </template> <script> import DxFunnel, { DxTitle, DxMargin, DxTooltip, DxItem, DxBorder, DxLegend, DxLabel, DxFont } from 'devextreme-vue/funnel'; import { dataSource } from './data.js'; export default { components: { DxFunnel, DxTitle, DxMargin, DxTooltip, DxItem, DxBorder, DxLegend, DxLabel, DxFont }, data() { return { dataSource }; } }; </script> <style> #pyramid { height: 440px; } </style>
import { createApp } from 'vue'; import App from './App.vue'; createApp(App).mount('#app');
<!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="" /> <link rel="stylesheet" type="text/css" href="" /> <script src=""></script> <script src=""></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import('./index.js'); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"> </div> </div> </body> </html>
export const dataSource = [ { count: 75, level: 'Junior Engineer' }, { count: 95, level: 'Mid-Level Engineer' }, { count: 53, level: 'Senior Engineer' }, { count: 23, level: 'Lead Engineer' }, { count: 18, level: 'Architect' } ];
System.config({ transpiler: 'plugin-babel', meta: { '*.vue': { loader: 'vue-loader' }, 'devextreme/localization.js': { "esModule": true }, }, paths: { 'npm:': '' }, map: { 'vue': 'npm:vue@3.0.0/dist/vue.esm-browser.js', 'vue-loader': 'npm:dx-systemjs-vue-browser@1.0.15/index.js', 'mitt': 'npm:mitt/dist/mitt.umd.js', 'rrule': 'npm:rrule@2.6.6/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.25.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@20.2.5', 'devextreme-vue': 'npm:devextreme-vue@20.2.5', 'jszip': 'npm:jszip@3.5.0/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@0.9.8/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.0.11/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@2.0.18/dist/dx-gantt.js', 'preact': 'npm:preact@10.5.11/dist/preact.js', 'preact/hooks': 'npm:preact@10.5.11/hooks/dist/hooks.js', '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' }, packages: { 'devextreme-vue': { main: 'index.js' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme/events/utils': { main: 'index' }, 'devextreme/events': { main: 'index' }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js' } }, babelOptions: { sourceMaps: false, stage0: true } });