plugin/bubble-sets/basic
Example page
import { Graph } from '@antv/g6';
fetch('https://assets.antv.antgroup.com/g6/collection.json')
.then((res) => res.json())
.then((data) => {
const groupedNodesByCluster = data.nodes.reduce((acc, node) => {
const cluster = node.data.cluster;
acc[cluster] ||= [];
acc[cluster].push(node.id);
return acc;
}, {});
const createStyle = (baseColor) => ({
fill: baseColor,
stroke: baseColor,
labelFill: '#fff',
labelPadding: 2,
labelBackgroundFill: baseColor,
labelBackgroundRadius: 5,
});
const graph = new Graph({
container: 'container',
data,
behaviors: ['zoom-canvas', 'drag-canvas', 'drag-element'],
node: {
palette: { field: 'cluster' },
},
layout: {
type: 'force',
preventOverlap: true,
linkDistance: (d) => {
if (d.source === 'node0' || d.target === 'node0') {
return 200;
}
return 80;
},
},
plugins: [
{
key: 'bubble-sets-a',
type: 'bubble-sets',
members: groupedNodesByCluster['a'],
labelText: 'cluster-a',
...createStyle('#1783FF'),
},
{
key: 'bubble-sets-b',
type: 'bubble-sets',
members: groupedNodesByCluster['b'],
labelText: 'cluster-b',
...createStyle('#00C9C9'),
},
{
key: 'bubble-sets-c',
type: 'bubble-sets',
members: groupedNodesByCluster['c'],
labelText: 'cluster-c',
...createStyle('#F08F56'),
},
{
key: 'bubble-sets-d',
type: 'bubble-sets',
members: groupedNodesByCluster['d'],
labelText: 'cluster-d',
...createStyle('#D580FF'),
},
],
autoFit: 'center',
});
graph.render();
});