Your search did not match any results.
Charts

Discrete Axis Zooming and Panning

Documentation

Discrete data support is one of many strengths of the Chart component. In this example, you can zoom data in the Chart using another DevExtreme JavaScript UI component, the RangeSelector.

Copy to CodeSandBox
Apply
Reset
<div id="chart-demo"> <dx-chart id="zoomedChart" palette="soft" [dataSource]="chemicalComposition" title="The Chemical Composition of the Earth Layers"> <dxi-series *ngFor="let item of seriesSource" [valueField]="item.valueField" [name]="item.name"> </dxi-series> <dxo-common-series-settings type="bar" [ignoreEmptyPoints]="true"> </dxo-common-series-settings> <dxi-value-axis> <dxo-label [customizeText]="customizeText"></dxo-label> </dxi-value-axis> <dxo-argument-axis #argumentAxis> </dxo-argument-axis> <dxo-legend [visible]="true" verticalAlignment="top" horizontalAlignment="right" orientation="horizontal"> <dxo-border [visible]="true"></dxo-border> </dxo-legend> </dx-chart> <dx-range-selector [dataSource]="chemicalComposition" [(value)]="argumentAxis.visualRange"> <dxo-size [height]="120"></dxo-size> <dxo-margin [left]="10"></dxo-margin> <dxo-scale [minorTickCount]="1"></dxo-scale> <dxo-behavior callValueChanged="onMoving"></dxo-behavior> <dxo-chart palette="soft"> <dxo-common-series-settings type="bar" [ignoreEmptyPoints]="true"> </dxo-common-series-settings> <dxi-series *ngFor="let item of seriesSource" [valueField]="item.valueField" [name]="item.name"> </dxi-series> </dxo-chart> </dx-range-selector> </div>
import { NgModule, Component, ViewChild, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxChartModule, DxRangeSelectorModule } from 'devextreme-angular'; import { Service, ChemicalComposition, SerieDescription } 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 { chemicalComposition: ChemicalComposition[]; seriesSource: SerieDescription[]; constructor(service: Service) { this.chemicalComposition = service.getChemicalComposition(); this.seriesSource = service.getSeries(); } customizeText(arg: any) { return arg.valueText + "%"; } } @NgModule({ imports: [ BrowserModule, DxChartModule, DxRangeSelectorModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep #zoomedChart { margin-bottom: 20px; }
import { Injectable } from '@angular/core'; export class ChemicalComposition { arg: string; Si?: number; Fe?: number; Ni?: number; S?: number; O?: number; Mg?: number; Al?: number; Ca?: number; Na?: number; K?: number; } export class SerieDescription { name: string; valueField: string; } let chemicalComposition: ChemicalComposition[] = [{ arg: "Inner Core", Si: 7.35, Fe: 79.39, Ni: 5.2, S: 2.3, O: 4.1 }, { arg: "Outer Core", Si: 7.33, Fe: 78.56, Ni: 5.2, S: 2.7, O: 4.2 }, { arg: "Lower Mantle", Si: 21.5, Fe: 5.8, O: 44.8, Mg: 22.8, Al: 2.2, Ca: 2.3, Na: 0.3, K: 0.03 }, { arg: "Upper Mantle", Si: 28.1, Mg: 23.2, Fe: 4.3, Al: 1.2, Ca: 2.2, O: 40.3, Na: 0.2 }, { arg: "Lower Crust", O: 46.6, Si: 27.7, Al: 8.1, Fe: 5, Ca: 3.6, Na: 2.8, K: 2.6, Mg: 1.5 }, { arg: "Upper Crust", O: 47, Si: 29.5, Al: 8.05, Fe: 4.66, Ca: 2.96, Na: 2.5, K: 2.5, Mg: 1.87 }]; let seriesSource: SerieDescription[] = [{ name: "Si", valueField: "Si" }, { name: "Fe", valueField: "Fe" }, { name: "Ni", valueField: "Ni" }, { name: "S", valueField: "S" }, { name: "O", valueField: "O" }, { name: "Mg", valueField: "Mg" }, { name: "Al", valueField: "Al" }, { name: "K", valueField: "K" }, { name: "Na", valueField: "Na" }]; @Injectable() export class Service { getChemicalComposition(): ChemicalComposition[] { return chemicalComposition; } getSeries(): SerieDescription[] { return seriesSource; } }
// 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/ window.config = { transpiler: 'ts', typescriptOptions: { module: "system", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" }, 'devextreme/localization.js': { "esModule": true } }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@3.5.3/lib/typescript.js', '@angular': 'npm:@angular', 'tslib': 'npm:tslib@2.2.0/tslib.js', 'rxjs': 'npm:rxjs@6.4.0', 'rrule': 'npm:rrule@2.6.6/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.27.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@21.1.3/cjs', 'devextreme/bundles/dx.all': 'npm:devextreme@21.1.3/bundles/dx.all.js', 'jszip': 'npm:jszip@3.6.0/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@1.0.0/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.1.15', 'devexpress-gantt': 'npm:devexpress-gantt@2.1.31', 'devextreme-angular': 'npm:devextreme-angular@21.1.3', '@devextreme/vdom': 'npm:@devextreme/vdom@1.2.1', 'inferno': 'npm:inferno@7.4.8/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat@7.4.8/dist/inferno-compat.min.js', 'inferno-create-element': 'npm:inferno-create-element@7.4.8/dist/inferno-create-element.min.js', 'inferno-dom': 'npm:inferno-dom@1.0.7/dist/inferno-dom.min.js', 'inferno-hydrate': 'npm:inferno-hydrate@7.4.8/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode@7.4.8/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class@7.4.8/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras@7.4.8/dist/inferno-extras.min.js' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, '@devextreme/vdom': { defaultExtension: 'js' }, 'devextreme/events/utils': { main: 'index' }, 'devextreme/events': { main: 'index' }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js' } }, packageConfigPaths: [ "npm:@devextreme/*/package.json", "npm:@angular/*/package.json", "npm:@angular/common/*/package.json", "npm:rxjs/package.json", "npm:rxjs/operators/package.json", "npm:devextreme-angular/*/package.json", "npm:devextreme-angular/ui/*/package.json", "npm:devextreme-angular/package.json", "npm:devexpress-diagram/package.json", "npm:devexpress-gantt/package.json", ] }; System.config(window.config);
<!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/21.1.3/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/21.1.3/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.10.2/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>