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 widget with the algorithm option set to «dynamicHeight» and inverted option set to true.

Copy to CodeSandBox
<dx-funnel id="pyramid" palette="Harmony light" [dataSource]="dataSource" argumentField="level" valueField="count" [inverted]="true" algorithm="dynamicHeight" [sortData]="false"> <dxo-title text="Team Composition" [margin]="30"></dxo-title> <dxo-tooltip [enabled]="true"></dxo-tooltip> <dxo-item> <dxo-border [visible]="true"></dxo-border> </dxo-item> <dxo-legend [visible]="true"></dxo-legend> <dxo-label visible="true" horizontalAlignment="left" backgroundColor="none"> <dxo-font [size]="16"></dxo-font> </dxo-label> </dx-funnel>
import { NgModule, Component, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxFunnelModule } from 'devextreme-angular'; import { Data, Service } from './app.service'; if(!/localhost/.test( { enableProdMode(); } @Component({ selector: 'demo-app', templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'], providers: [Service] }) export class AppComponent { dataSource: Data[]; constructor(service: Service) { this.dataSource = service.getData(); } } @NgModule({ imports: [ BrowserModule, DxFunnelModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep #pyramid { height: 440px; }
import { Injectable } from '@angular/core'; export class Data { count: number; level: string; } let data: Data[] = [{ 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" }]; @Injectable() export class Service { getData(): Data[] { return data; } }
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular and DevExtreme here: // System.config({ transpiler: 'ts', typescriptOptions: { module: "commonjs", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" } }, paths: { 'npm:': '' }, map: { 'ts': 'npm:plugin-typescript@7.0.6/lib/plugin.js', 'typescript': 'npm:typescript@2.2.2/lib/typescript.js', '@angular/core': 'npm:@angular/core@7.1.3/bundles/core.umd.js', '@angular/common': 'npm:@angular/common@7.1.3/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler@7.1.3/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser@7.1.3/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@7.1.3/bundles/platform-browser-dynamic.umd.js', '@angular/router': 'npm:@angular/router@7.1.3/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms@7.1.3/bundles/forms.umd.js', '@angular/common/http': 'npm:@angular/common@7.1.3/bundles/common-http.umd.js', 'tslib': 'npm:tslib/tslib.js', 'rxjs': 'npm:rxjs@6.3.3', 'rxjs/operators': 'npm:rxjs@6.3.3/operators', 'devextreme': 'npm:devextreme@18.2', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.6/dist/quill.js', 'devextreme-angular': 'npm:devextreme-angular@18.2' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'rxjs': { main: 'index.js', defaultExtension: 'js' }, 'rxjs/operators': { main: 'index.js', defaultExtension: 'js' }, 'devextreme-angular': { main: 'index.js', defaultExtension: 'js' } } });
<!DOCTYPE html> <html xmlns=""> <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="dx-theme" data-theme="generic.light" href="" /> <script src=""></script> <script src=""></script> <script src=""></script> <script src=""></script> <script src="config.js"></script> <script> System.import('app').catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>