How can I help you?
Color mapping in EJ2 TypeScript Maps control
6 Feb 202624 minutes to read
Color mapping customizes shape colors based on data values. It supports three primary types: range, equal, and desaturation. To apply color mapping, bind data to the dataSource property of layerSettings and set the colorValuePath property in shapeSettings to specify which field controls the color value.
Range color mapping
Range color mapping assigns colors to shapes based on numeric value ranges. Use the from and to properties in colorMapping to define the ranges and their corresponding colors.
Set the Population_Density data as the dataSource property of layerSettings and set the colorValuePath property in shapeSettings to density. Create color mappings by specifying from and to value ranges in colorMapping.
export let population_density = [
...
{
'code': 'AE',
'value': 90,
'name': 'United Arab Emirates',
'population': 8264070,
'density': 99
},
{
'code': 'GB',
'value': 257,
'name': 'United Kingdom',
'population': 62041708,
'density': 255
},
{
'code': 'US',
'value': 34,
'name': 'United States',
'population': 325020000,
'density': 33
}
...
];import { Maps } from '@syncfusion/ej2-maps';
import { world_map } from './world-map.ts';
import { Population_Density } from './data.ts';
let map: Maps = new Maps({
layers: [{
shapeData: world_map,
shapeDataPath: 'name',
shapePropertyPath: 'name',
dataSource: Population_Density,
shapeSettings: {
colorValuePath: 'density',
fill: '#E5E5E5',
colorMapping: [
{
from: 0.00001, to: 100, color: 'rgb(153,174,214)'
},
{
from: 100, to: 200, color: 'rgb(115,143,199)'
},
{
from: 200, to: 300, color: 'rgb(77,112,184)'
},
{
from: 300, to: 500, color: 'rgb(38,82,168)'
},
{
from: 500, to: 19000, color: 'rgb(0,51,153)'
}
]
}
}]
});
map.appendTo('#element');<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Maps</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="world-map.js"></script>
<script src="usa.js"></script>
<script src="data.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container' style="height: 500px; width: 700px">
<div id='element'></div>
</div>
</body>
</html>Equal color mapping
Equal color mapping assigns colors to shapes when a data value matches a specified value in colorMapping. This approach is useful for categorical or discrete data.
The following example demonstrates equal color mapping with the unCountries dataset, which categorizes UN Security Council members as permanent or non-permanent. Set unCountries as the dataSource property of layerSettings and set the colorValuePath property in shapeSettings to Membership. In colorMapping, specify value entries for Permanent and Non-Permanent, each with an assigned color. When a shape’s field value matches a value entry, the corresponding color is applied.
export let unCountries: object[] = [
{ Country: 'China', Membership: 'Permanent' },
{ Country: 'France', Membership: 'Permanent' },
{ Country: 'Russia', Membership: 'Permanent' },
{ Country: 'United Kingdom', Membership: 'Permanent' },
{ Country: 'United States', Membership: 'Permanent' },
{ Country: 'Bolivia', Membership: 'Non-Permanent' },
{ Country: 'Eq. Guinea', Membership: 'Non-Permanent' },
{ Country: 'Ethiopia', Membership: 'Non-Permanent' },
{ Country: "Côte d'Ivoire", Membership: 'Permanent' },
{ Country: 'Kazakhstan', Membership: 'Non-Permanent' },
{ Country: 'Kuwait', Membership: 'Non-Permanent' },
{ Country: 'Netherlands', Membership: 'Non-Permanent' },
{ Country: 'Peru', Membership: 'Non-Permanent' },
{ Country: 'Poland', Membership: 'Non-Permanent' },
{ Country: 'Sweden', Membership: 'Non-Permanent' },
];import { Maps } from '@syncfusion/ej2-maps';
import { world_map } from './world-map.ts';
import { unCountries } from './data.ts';
let map: Maps = new Maps({
layers: [{
shapeData: world_map,
shapeDataPath: 'Country',
shapePropertyPath: 'name',
dataSource : unCountries,
shapeSettings: {
fill: '#E5E5E5',
colorMapping: [
{
value: 'Permanent',
color: '#C3E6ED'
},
{
color: '#F1931B',
value: 'Non-Permanent'
}
],
colorValuePath: 'Membership'
}
}]
});
map.appendTo('#element');<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Maps</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="world-map.js"></script>
<script src="usa.js"></script>
<script src="data.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container' style="height: 500px; width: 700px">
<div id='element'></div>
</div>
</body>
</html>Desaturation color mapping
Desaturation color mapping varies opacity across a numeric range, similar to range color mapping. The minOpacity and maxOpacity properties in colorMapping control the opacity gradient.
The following example shows how to apply desaturation color mapping to shapes. Please refer to the Population_Density data source in the Range color mapping section for the below sample. Bind the Population_Density data to the dataSource property of layerSettings and set the colorValuePath property of shapeSettings as density and set the range values using the from and to properties of colorMapping. The opacity of the color mapping can be set using the minOpacity and maxOpacity properties.
import { Maps } from '@syncfusion/ej2-maps';
import { world_map } from './world-map.ts';
import { Population_Density } from './data.ts';
let map: Maps = new Maps({
layers: [{
shapeData: world_map,
shapeDataPath: 'name',
shapePropertyPath: 'name',
dataSource: Population_Density,
shapeSettings: {
colorValuePath: 'density',
colorMapping: [
{
from: 0, to: 100, color: 'red', minOpacity:0.2, maxOpacity:1
},
{
from: 101, to: 200, color: 'blue', minOpacity:0.3, maxOpacity:1
}
]
}
}]
});
map.appendTo('#element');<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Maps</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="world-map.js"></script>
<script src="usa.js"></script>
<script src="data.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container' style="height: 500px; width: 700px">
<div id='element'></div>
</div>
</body>
</html>Desaturation with multiple colors
Multiple colors create a gradient effect across a range. Use the color property in colorMapping to specify multiple color stops for a smooth gradient transition.
The following example demonstrates how to use multiple colors in color mapping. Please refer to the Population_Density data source in the Range color mapping section for the below sample. Bind the Population_Density data to the dataSource property of layerSettings property and set the colorValuePath property of shapeSettings as density and set the range values using the from and to properties of colorMapping property.
import { Maps } from '@syncfusion/ej2-maps';
import { world_map } from './world-map.ts';
import { Population_Density } from './data.ts';
let map: Maps = new Maps({
layers: [{
shapeData: world_map,
shapeDataPath: 'name',
shapePropertyPath: 'name',
dataSource: Population_Density,
shapeSettings: {
colorValuePath: 'density',
colorMapping: [
{
from: 0, to: 100, color: ['red','blue']
},
{
from: 101, to: 200, color: ['green','yellow']
}
]
}
}]
});
map.appendTo('#element');<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Maps</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="world-map.js"></script>
<script src="usa.js"></script>
<script src="data.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container' style="height: 500px; width: 700px">
<div id='element'></div>
</div>
</body>
</html>Color for items excluded from color mapping
Color mapping can be applied to the shapes in the Maps which does not match color mapping criteria such as range or equal values using the color property of colorMapping.
The following example shows how to set the color for items excluded from the color mapping. Please refer to the Population_Density data source in the Range color mapping section for the below sample. In the following example, color mapping is added for the ranges from 0 to 200. If the data source having any records beyond this range, the color mapping will not be applied. To apply the color for these excluded items, set the color property alone in the colorMapping.
import { Maps } from '@syncfusion/ej2-maps';
import { world_map } from './world-map.ts';
import { Population_Density } from './data.ts';
let map: Maps = new Maps({
layers: [{
shapeData: world_map,
shapeDataPath: 'name',
shapePropertyPath: 'name',
dataSource: Population_Density,
shapeSettings: {
colorValuePath: 'density',
colorMapping: [
{
from: 0, to: 100, color: 'skyblue',
},
{
from: 101, to: 200, color: 'blue',
},
{
color: 'green'
}
]
}
}]
});
map.appendTo('#element');<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Maps</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="world-map.js"></script>
<script src="usa.js"></script>
<script src="data.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container' style="height: 500px; width: 700px">
<div id='element'></div>
</div>
</body>
</html>Color mapping for bubbles
Range, equal, and desaturation color mapping apply to bubble layers as well. Configure bubble color mapping by setting the dataSource property of bubbleSettings and specifying the colorValuePath field. Apply colorMapping within bubbleSettings to control bubble colors. Gradient and fallback colors work identically for bubbles as for shapes.
import { world_map } from './world-map.ts';
import { Maps, Bubble } from '@syncfusion/ej2-maps';
Maps.Inject(Bubble);
let map: Maps = new Maps({
layers: [{
shapeData: world_map,
shapeDataPath: 'name',
shapePropertyPath: 'name',
bubbleSettings: [{
visible: true,
minRadius: 5,
dataSource: [
{ name: 'India', population: '38332521' },
{ name: 'New Zealand', population: '19651127' },
{ name: 'Pakistan', population: '3090416' }
],
valuePath: 'population',
colorValuePath: 'population',
colorMapping: [{
value: '38332521',
color: '#C3E6ED'
},
{
value: '19651127',
color: '#F1931B'
},
{
value: '3090416',
color: 'blue'}
]
}]
}]
});
map.appendTo('#element');<!DOCTYPE html>
<html lang="en">
<head>
<title>EJ2 Maps</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="world-map.js"></script>
<script src="usa.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>Loading....</div>
<div id='container' style="height: 500px; width: 700px">
<div id='element'></div>
</div>
</body>
</html>