Bubble in Vue Maps component
13 Jun 202424 minutes to read
Bubbles in the Maps component represent the underlying data values of the Maps. It can be scattered throughout the Maps shapes that contain values in the data source. Bubbles are enabled by setting the visible
property of bubbleSettings
to true. To add bubbles to the Maps, bind the data source to the dataSource
property of bubbleSettings
and set the field name, that contains the numerical data, in the data source to the valuePath
property.
export let world_map = // paste the world map from worldMap.json GeoJSON file.
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script setup>
import { provide } from "vue";
import { MapsComponent as EjsMaps, Bubble, LayerDirective as ELayer, LayersDirective as ELayers } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
const shapeData = world_map;
const shapeDataPath = 'name';
const shapePropertyPath = 'name';
const bubbleSettings = [{
visible: true,
minRadius: 20,
dataSource: [
{ name: 'India', population: '38332521' },
{ name: 'New Zealand', population: '19651127' },
{ name: 'Pakistan', population: '3090416' }
],
maxRadius: 40,
valuePath: 'population'
}];
provide('maps', [Bubble]);
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script>
import { MapsComponent, Bubble, LayerDirective, LayersDirective } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
export default {
name: "App",
components: {
"ejs-maps":MapsComponent,
"e-layers":LayersDirective,
"e-layer":LayerDirective,
},
data () {
return{
shapeData: world_map,
shapeDataPath: 'name',
shapePropertyPath: 'name',
bubbleSettings: [{
visible: true,
minRadius: 20,
dataSource: [
{ name: 'India', population: '38332521' },
{ name: 'New Zealand', population: '19651127' },
{ name: 'Pakistan', population: '3090416' }
],
maxRadius: 40,
valuePath: 'population'
}]
}
},
provide: {
maps: [Bubble]
}
}
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
Bubble shapes
The following types of shapes are available to render the bubbles in Maps.
- Circle
- Square
By default, bubbles are rendered in the Circle type. To change the type of the bubble, set the bubbleType
property of bubbleSettings
as Square to render the square shape bubbles.
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script setup>
import { provide } from "vue";
import { MapsComponent as EjsMaps, Bubble, LayerDirective as ELayer, LayersDirective as ELayers } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
const shapeData = world_map;
const shapeDataPath = 'name';
const shapePropertyPath = 'name';
const bubbleSettings = [{
visible: true,
bubbleType: 'Square',
dataSource: [
{ name: 'India', population: '38332521' },
{ name: 'Pakistan', population: '3090416' }
],
valuePath: 'population'
}];
provide('maps', [Bubble]);
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script>
import { MapsComponent, Bubble, LayerDirective, LayersDirective } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
export default {
name: "App",
components: {
"ejs-maps":MapsComponent,
"e-layers":LayersDirective,
"e-layer":LayerDirective
},
data () {
return{
shapeData: world_map,
shapeDataPath: 'name',
shapePropertyPath: 'name',
bubbleSettings: [{
visible: true,
bubbleType: 'Square',
dataSource: [
{ name: 'India', population: '38332521' },
{ name: 'Pakistan', population: '3090416' }
],
valuePath: 'population'
}]
}
},
provide: {
maps: [Bubble]
}
}
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
Customization
The following properties are available in bubbleSettings
to customize the bubbles of the Maps component.
-
border
- To customize the color, width and opacity of the border of the bubbles in Maps. -
fill
- To apply the color for bubbles in Maps. -
opacity
- To apply opacity to the bubbles in Maps. -
animationDelay
- To change the time delay in the transition for bubbles. -
animationDuration
- To change the time duration of animation for bubbles.
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script setup>
import { provide } from "vue";
import { MapsComponent as EjsMaps, Bubble, LayerDirective as ELayer, LayersDirective as ELayers } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
const shapeData = world_map;
const shapeDataPath = 'name';
const shapePropertyPath = 'name';
const bubbleSettings = [{
visible: true,
minRadius: 5,
dataSource: [
{ name: 'India', population: '38332521' },
{ name: 'New Zealand', population: '19651127' },
{ name: 'Pakistan', population: '3090416' }
],
fill: 'green',
animationDelay: 100,
animationDuration: 1000,
maxRadius: 20,
border: {
color: 'blue',
width: 2
},
opacity: 1,
valuePath: 'population'
}];
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script>
import { MapsComponent, Bubble, LayerDirective, LayersDirective } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
export default {
name: "App",
components: {
"ejs-maps":MapsComponent,
"e-layers":LayersDirective,
"e-layer":LayerDirective
},
data () {
return{
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' }
],
fill: 'green',
animationDelay: 100,
animationDuration: 1000,
maxRadius: 20,
border: {
color: 'blue',
width: 2
},
opacity: 1,
valuePath: 'population'
}]
}
},
provide: {
maps: [Bubble]
}
}
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
Setting colors to the bubbles from the data source
The color for each bubble in the Maps can be set using the colorValuePath
property of bubbleSettings
. The value for the colorValuePath
property is the field name from the data source of the bubbleSettings
which contains the color values.
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script setup>
import { provide } from "vue";
import { MapsComponent as EjsMaps, Bubble, LayerDirective as ELayer, LayersDirective as ELayers } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
const shapeData = world_map;
const shapeDataPath = 'name';
const shapePropertyPath = 'name';
const bubbleSettings = [{
visible: true,
minRadius: 20,
colorValuePath: 'color',
dataSource: [
{ name: 'India', population: '38332521', color: 'blue' },
{ name: 'New Zealand', population: '19651127', color: '#c2d2d6' },
{ name: 'Pakistan', population: '3090416', color: '#09156d' }
],
maxRadius: 40,
valuePath: 'population'
}];
provide('maps', [Bubble]);
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script>
import { MapsComponent, Bubble, LayerDirective, LayersDirective } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
export default {
name: "App",
components: {
"ejs-maps":MapsComponent,
"e-layers":LayersDirective,
"e-layer":LayerDirective
},
data () {
return{
shapeData: world_map,
shapeDataPath: 'name',
shapePropertyPath: 'name',
bubbleSettings: [{
visible: true,
minRadius: 20,
colorValuePath: 'color',
dataSource: [
{ name: 'India', population: '38332521', color: 'blue' },
{ name: 'New Zealand', population: '19651127', color: '#c2d2d6' },
{ name: 'Pakistan', population: '3090416', color: '#09156d' }
],
maxRadius: 40,
valuePath: 'population'
}]
}
},
provide: {
maps: [Bubble]
}
}
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
Setting the range of the bubble size
The size of the bubbles is calculated from the values got from the valuePath
property. The range for the radius of the bubbles can be modified using minRadius
and maxRadius
properties.
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script setup>
import { provide } from "vue";
import { MapsComponent as EjsMaps, Bubble, LayerDirective as ELayer, LayersDirective as ELayers } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
const shapeData = world_map;
const shapeDataPath = 'name';
const shapePropertyPath = 'name';
const bubbleSettings = [{
visible: true,
minRadius: 5,
dataSource: [
{ name: 'India', population: '38332521' },
{ name: 'New Zealand', population: '19651127' },
{ name: 'Pakistan', population: '3090416' }
],
maxRadius: 80,
valuePath: 'population'
}];
provide('maps', [Bubble]);
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script>
import { MapsComponent, Bubble, LayerDirective, LayersDirective } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
export default {
name: "App",
components: {
"ejs-maps":MapsComponent,
"e-layers":LayersDirective,
"e-layer":LayerDirective
},
data () {
return{
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' }
],
maxRadius: 80,
valuePath: 'population'
}]
}
},
provide: {
maps: [Bubble]
}
}
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
Multiple bubble groups
Multiple groups of bubbles can be added to the Maps using the bubbleSettings
in which the properties of bubbles are added as an array. The customization for the bubbles can be done with the bubbleSettings
. In the following example, the gender-wise population ratio is demonstrated with two different bubble groups.
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script setup>
import { provide } from "vue";
import { MapsComponent as EjsMaps, Bubble, LayerDirective as ELayer, LayersDirective as ELayers } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
const shapeData = world_map;
const shapeDataPath = 'name';
const shapePropertyPath = 'name';
const bubbleSettings = [{
visible: true,
minRadius: 5,
valuePath: "femaleRatio",
colorValuePath: "femaleRatioColor",
dataSource: [
{
country: "United States", femaleRatio: 50.50442726, maleRatio: 49.49557274, femaleRatioColor: "green", maleRatioColor: "blue"
},
{
country: "India", femaleRatio: 48.18032713, maleRatio: 51.81967287, femaleRatioColor: "blue", maleRatioColor: "#c2d2d6"
},
{
country: "Oman", femaleRatio: 34.15597234, maleRatio: 65.84402766, femaleRatioColor: "#09156d", maleRatioColor: "orange"
},
{
country: "United Arab Emirates", femaleRatio: 27.59638942, maleRatio: 72.40361058, femaleRatioColor: "#09156d", maleRatioColor: "orange"
}
],
maxRadius: 20,
},
{
visible: true,
bubbleType: 'Circle',
opacity: 0.4,
minRadius: 15,
valuePath: "maleRatio",
colorValuePath: "maleRatioColor",
dataSource: [
{
country: "United States", femaleRatio: 50.50442726, maleRatio: 49.49557274, femaleRatioColor: "green", maleRatioColor: "blue"
},
{
country: "India", femaleRatio: 48.18032713, maleRatio: 51.81967287, femaleRatioColor: "blue", maleRatioColor: "#c2d2d6"
},
{
country: "Oman", femaleRatio: 34.15597234, maleRatio: 65.84402766, femaleRatioColor: "#09156d", maleRatioColor: "orange"
},
{
country: "United Arab Emirates", femaleRatio: 27.59638942, maleRatio: 72.40361058, femaleRatioColor: "#09156d", maleRatioColor: "orange"
}
],
maxRadius: 25,
}];
provide('maps', [Bubble]);
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script>
import { MapsComponent, Bubble, LayerDirective, LayersDirective } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
export default {
name: "App",
components: {
"ejs-maps":MapsComponent,
"e-layers":LayersDirective,
"e-layer":LayerDirective
},
data () {
return{
shapeData: world_map,
shapeDataPath: 'name',
shapePropertyPath: 'name',
bubbleSettings: [{
visible: true,
minRadius: 5,
valuePath: "femaleRatio",
colorValuePath: "femaleRatioColor",
dataSource: [
{
country: "United States", femaleRatio: 50.50442726, maleRatio: 49.49557274, femaleRatioColor: "green", maleRatioColor: "blue"
},
{
country: "India", femaleRatio: 48.18032713, maleRatio: 51.81967287, femaleRatioColor: "blue", maleRatioColor: "#c2d2d6"
},
{
country: "Oman", femaleRatio: 34.15597234, maleRatio: 65.84402766, femaleRatioColor: "#09156d", maleRatioColor: "orange"
},
{
country: "United Arab Emirates", femaleRatio: 27.59638942, maleRatio: 72.40361058, femaleRatioColor: "#09156d", maleRatioColor: "orange"
}
],
maxRadius: 20,
},
{
visible: true,
bubbleType: 'Circle',
opacity: 0.4,
minRadius: 15,
valuePath: "maleRatio",
colorValuePath: "maleRatioColor",
dataSource: [
{
country: "United States", femaleRatio: 50.50442726, maleRatio: 49.49557274, femaleRatioColor: "green", maleRatioColor: "blue"
},
{
country: "India", femaleRatio: 48.18032713, maleRatio: 51.81967287, femaleRatioColor: "blue", maleRatioColor: "#c2d2d6"
},
{
country: "Oman", femaleRatio: 34.15597234, maleRatio: 65.84402766, femaleRatioColor: "#09156d", maleRatioColor: "orange"
},
{
country: "United Arab Emirates", femaleRatio: 27.59638942, maleRatio: 72.40361058, femaleRatioColor: "#09156d", maleRatioColor: "orange"
}
],
maxRadius: 25,
}]
}
},
provide: {
maps: [Bubble]
}
}
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
Enable tooltip for bubble
The tooltip for the bubbles can be enabled by setting the visible
property of the tooltipSettings
as true. The content for the tooltip can be set using the valuePath
property in the tooltipSettings
of the bubbleSettings
where the value for the valuePath
property is the field name from the data source of the bubbleSettings
. Also added any HTML element as the template in tooltip using the template
property.
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script setup>
import { provide } from "vue";
import { MapsComponent as EjsMaps, Bubble, MapsTooltip, LayerDirective as ELayer, LayersDirective as ELayers } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
const shapeData = world_map;
const shapeDataPath = 'name';
const shapePropertyPath = 'name';
const bubbleSettings = [{
visible: true,
minRadius: 5,
dataSource: [
{ name: 'India', population: '38332521' },
{ name: 'New Zealand', population: '19651127' },
{ name: 'Pakistan', population: '3090416' }
],
maxRadius: 20,
valuePath: 'population',
tooltipSettings: {
visible: true,
valuePath: 'population',
}
}];
provide('maps', [Bubble, MapsTooltip]);
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>
<template>
<div id="app">
<div class='wrapper'>
<ejs-maps >
<e-layers>
<e-layer :shapeData='shapeData' :shapePropertyPath='shapePropertyPath' :shapeDataPath='shapeDataPath' :bubbleSettings='bubbleSettings' ></e-layer>
</e-layers>
</ejs-maps>
</div>
</div>
</template>
<script>
import { MapsComponent, Bubble, MapsTooltip, LayerDirective, LayersDirective } from '@syncfusion/ej2-vue-maps';
import { world_map } from './world-map.js';
export default {
name: "App",
components: {
"ejs-maps":MapsComponent,
"e-layers":LayersDirective,
"e-layer":LayerDirective
},
data () {
return {
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' }
],
maxRadius: 20,
valuePath: 'population',
tooltipSettings: {
visible: true,
valuePath: 'population',
}
}]
}
},
provide: {
maps: [Bubble, MapsTooltip]
}
}
</script>
<style>
.wrapper {
max-width: 400px;
margin: 0 auto;
}
</style>