Your search did not match any results.
Charts

Tiling Algorithms

Documentation
The TreeMap widget supports three layout algorithms out of the box and provides the capability to implement your own algorithm. In this demo, you can change the applied algorithm at runtime using the drop-down menu above the widget.
Apply
Reset
<div class="algorithm-option"> Tiling Algorithm: <dx-select-box #selectbox class="selectbox" [items]="algorithms" [width]="200" [value]="algorithms[2]"></dx-select-box> </div> <dx-tree-map [dataSource]="getPopulationsByAge" title="Population by Age Groups" [layoutAlgorithm]="selectbox.value === 'custom' ? customAlgorithm : selectbox.value"> <dxo-colorizer type="discrete" [colorizeGroups]="true"></dxo-colorizer> <dxo-tooltip [enabled]="true" format="thousands" [customizeTooltip]="customizeTooltip"></dxo-tooltip> <dxo-size [height]="460"></dxo-size> </dx-tree-map>
import { NgModule, Component } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxTreeMapModule, DxSelectBoxModule } from 'devextreme-angular'; import { PopulationByAge, Service } from './app.service'; @Component({ selector: 'demo-app', templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'], providers: [Service] }) export class AppComponent { getPopulationsByAge: PopulationByAge[]; algorithms = ["sliceAndDice", "squarified", "strip", "custom"]; constructor(service: Service) { this.getPopulationsByAge = service.getPopulationsByAge(); } customizeTooltip(arg) { var data = arg.node.data, parentData = arg.node.getParent().data, result = ""; if (arg.node.isLeaf()) { result = "<b>" + parentData.name + "</b><br />" + data.name + "<br />" + arg.valueText + " (" + (100 * data.value/parentData.total).toFixed(1) + "%)"; } else { result = "<b>" + data.name + "</b>"; } return { text: result }; } customAlgorithm(arg) { var side = 0, totalRect = arg.rect.slice(), totalSum = arg.sum; arg.items.forEach(function (item) { var size = Math.round((totalRect[side + 2] - totalRect[side]) * item.value / totalSum), pos, rect = totalRect.slice(); totalSum -= item.value; rect[side + 2] = totalRect[side] = totalRect[side] + size; item.rect = rect; side = 1 - side; }); } } @NgModule({ imports: [ BrowserModule, DxTreeMapModule, DxSelectBoxModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
/deep/ .algorithm-option { line-height: 36px; margin-bottom: 10px; } /deep/ .algorithm-option > .selectbox { display: inline-block; vertical-align: top; margin-left: 10px; line-height: normal; }
import { Injectable } from '@angular/core'; export interface PopulationByAge { name: string; total: number; items: any[]; } let populationsByAge: PopulationByAge[] = [{ "name": "Brazil", "total": 200050486, "items": [{ "name": "Age 0-14", "value": 48058462 }, { "name": "Age 15-44", "value": 96036995 }, { "name": "Age 45-64", "value": 40715296 }, { "name": "Age 65+", "value": 15239733 }] }, { "name": "Japan", "total": 126345237, "items": [{ "name": "Age 0-14", "value": 16593766 }, { "name": "Age 15-44", "value": 45455276 }, { "name": "Age 45-64", "value": 32845790 }, { "name": "Age 65+", "value": 31450405 }] }, { "name": "United States", "total": 318497627, "items": [{ "name": "Age 0-14", "value": 63968935 }, { "name": "Age 15-44", "value": 127217843 }, { "name": "Age 45-64", "value": 83145484 }, { "name": "Age 65+", "value": 44165365 }] }]; @Injectable() export class Service { getPopulationsByAge() { return populationsByAge; } }
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular 2 and DevExtreme here: // https://github.com/DevExpress/devextreme-angular/blob/master/README.md System.config({ transpiler: 'ts', typescriptOptions: { module: "commonjs", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" } }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'ts': 'npm:plugin-typescript@4.0.10/lib/plugin.js', 'typescript': 'npm:typescript@2.0.6/lib/typescript.js', '@angular/core': 'npm:@angular/core@2.4.3/bundles/core.umd.js', '@angular/common': 'npm:@angular/common@2.4.3/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler@2.4.3/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser@2.4.3/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@2.4.3/bundles/platform-browser-dynamic.umd.js', '@angular/http': 'npm:@angular/http@2.4.3/bundles/http.umd.js', '@angular/router': 'npm:@angular/router@3.4.3/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms@2.4.3/bundles/forms.umd.js', 'rxjs': 'npm:rxjs@5.0.3', 'devextreme': 'npm:devextreme@16.2', 'jquery': 'npm:jquery@3.1.1/dist/jquery.min.js', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'devextreme-angular': 'npm:devextreme-angular@16.2' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme-angular': { main: 'index.js', defaultExtension: 'js' } } });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <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/16.2.6/css/dx.spa.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/16.2.6/css/dx.common.css" /> <link rel="dx-theme" data-theme="generic.light" href="https://cdn3.devexpress.com/jslib/16.2.6/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/zone.js@0.6.25/dist/zone.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.19.31/dist/system.js"></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>