Your search did not match any results.
Bar Charts

Custom Annotations

To customize an annotation, declare the SVG markup in the annotation template. Inside the template, you can access the annotation being customized.

en.wikipedia.org
Copy to CodeSandBox
Apply
Reset
<dx-chart id="chart" [dataSource]="populationData" > <dxo-title text="Top 5 Most Populated States in US"> </dxo-title> <dxi-series type="bar" name="Population" argumentField="name" valueField="population"> </dxi-series> <dxo-common-annotation-settings type="custom" series="Population" template="template" [allowDragging]="true"> </dxo-common-annotation-settings> <dxi-annotation *ngFor="let data of populationData" [data]="data" [argument]="data.name"> </dxi-annotation> <dxo-legend [visible]="false"></dxo-legend> <svg *dxTemplate="let annotation of 'template'" class="annotation"> <image attr.href="{{getImagePath(annotation)}}" width="60" height="40" /> <text x="70" y="25" class="state">{{annotation.argument}}</text> <text x="0" y="60"> <tspan class="caption">Capital:</tspan> <tspan dx="5">{{annotation.data.capital}}</tspan> <tspan dy="14" x="0" class="caption">Population:</tspan> <tspan dx="5">{{annotation.data.population | number:"3.0-0"}}</tspan> <tspan dy="14" x="0" class="caption">Area:</tspan> <tspan dx="5">{{annotation.data.area | number: "3.0-0"}}</tspan> <tspan dx="5">km</tspan> <tspan class="sup" dy="-2">2</tspan> </text> </svg> </dx-chart>
import { NgModule, Component, enableProdMode } from '@angular/core'; import { DecimalPipe } from '@angular/common'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxChartModule } from 'devextreme-angular'; import { Service, State } from './app.service'; if(!/localhost/.test(document.location.host)) { enableProdMode(); } @Component({ selector: 'demo-app', providers: [Service], templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'] }) export class AppComponent { populationData: State[]; pipe: any = new DecimalPipe("en-US"); constructor(service: Service) { this.populationData = service.getPopulationData(); } getImagePath(annotation) { const name = annotation.argument.replace(/\s/, "").toLowerCase(); return `../../../../images/flags/${name}.gif`; } } @NgModule({ imports: [ BrowserModule, DxChartModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep #chart { height: 440px; } ::ng-deep .annotation { font-size: 12px; } ::ng-deep .state { font-weight: 500; font-size: 14px; } ::ng-deep .caption { font-weight: 500; } ::ng-deep .sup { font-size: 0.8em; }
import { Injectable } from '@angular/core'; export interface State { name: string; population: number; capital: string; area: number; } const populationData: State[] = [{ name: 'California', population: 38802500, capital: 'Sacramento', area: 423967 }, { name: 'Texas', population: 26956958, capital: 'Austin', area: 695662 }, { name: 'Florida', population: 19893297, capital: 'Tallahassee', area: 170312 }, { name: 'New York', population: 19746227, capital: 'Albany', area: 141297 }, { name: 'Illinois', population: 12880580, capital: 'Springfield', area: 149995 }]; @Injectable() export class Service { getPopulationData(): State[] { return populationData; } }
// 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: // https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Create_a_DevExtreme_Application/ 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@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@3.4.5/lib/typescript.js', '@angular/core': 'npm:@angular/core@8.0.0/bundles/core.umd.js', '@angular/common': 'npm:@angular/common@8.0.0/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler@8.0.0/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser@8.0.0/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@8.0.0/bundles/platform-browser-dynamic.umd.js', '@angular/router': 'npm:@angular/router@8.0.0/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms@8.0.0/bundles/forms.umd.js', '@angular/common/http': 'npm:@angular/common@8.0.0/bundles/common-http.umd.js', 'tslib': 'npm:tslib/tslib.js', 'rxjs': 'npm:rxjs@6.3.3', 'rxjs/operators': 'npm:rxjs@6.3.3/operators', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.7/dist/quill.js', 'devexpress-diagram': 'npm:devexpress-diagram', 'devexpress-gantt': 'npm:devexpress-gantt', 'devextreme': 'npm:devextreme@19.2', 'devextreme-angular': 'npm:devextreme-angular@19.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="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/19.2.4/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.2.4/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.21.3/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>