Network Chart
Visualise nodes and edges to explain relationships, clusters, and connectivity.
Source
LLM docs
Package
npm install @plocks/chartsExamples
6
Properties
59
Playground
Basics
NetworkChart visualizes relationships among nodes and links.
Loading demo…
import { NetworkChart } from '@plocks/charts';
import { LINKS, NODES } from './data';
export function Demo() {
return (
<NetworkChart
title="Cross-team collaboration"
h={460}
layout="circular"
nodes={NODES}
links={LINKS}
/>
);
}Customer Referral Network
Loading demo…
import { NetworkChart } from '@plocks/charts';
import { COHORTS, REFERRALS } from './data';
const waveToColor = (wave?: number) => {
if (wave === 1) return '#34C759';
if (wave === 2) return '#4DABF7';
if (wave === 3) return '#FF922B';
return '#ADB5BD';
};
const waveToOpacity = (wave?: number) => {
if (wave === 1) return 0.7;
if (wave === 2) return 0.6;
if (wave === 3) return 0.55;
return 0.45;
};
export function Demo() {
return (
<NetworkChart
title="Customer referral influence network"
subtitle="Referral pathways by activation wave"
h={430}
nodes={COHORTS}
links={REFERRALS}
showLabels
nodeRadius={13}
nodeRadiusRange={[11, 25]}
linkWidthRange={[1, 3.6]}
linkColorAccessor={(link) => waveToColor(typeof link.meta?.wave === 'number' ? link.meta.wave : Number(link.meta?.wave))}
linkOpacityAccessor={(link) => waveToOpacity(typeof link.meta?.wave === 'number' ? link.meta.wave : Number(link.meta?.wave))}
/>
);
}Knowledge Sharing Connections
Loading demo…
import { useState, useMemo } from 'react';
import { Text } from 'react-native';
import { NetworkChart } from '@plocks/charts';
import { MENTORSHIPS, TEAMS } from './data';
const linkColorByType = (type: string | undefined) => {
switch (type) {
case 'cross-team':
return '#5F3DC4';
case 'program':
return '#1971C2';
case 'rotation':
return '#FFA94D';
case 'pairing':
return '#15AABF';
default:
return '#ADB5BD';
}
};
const linkOpacityByType = (type: string | undefined) => {
switch (type) {
case 'cross-team':
return 0.72;
case 'program':
return 0.6;
case 'rotation':
return 0.55;
case 'pairing':
return 0.5;
default:
return 0.45;
}
};
export function Demo() {
const [focusDetail, setFocusDetail] = useState<string | null>(null);
const highlightText = useMemo(() => focusDetail, [focusDetail]);
return (
<>
<NetworkChart
title="Knowledge sharing mentorship graph"
subtitle="Monthly mentorship hours across guild programs"
h={440}
layout="radial"
nodes={TEAMS}
links={MENTORSHIPS}
showLabels
nodeRadius={14}
nodeRadiusRange={[12, 26]}
linkWidthRange={[1.1, 3.8]}
linkShape="curved"
linkCurveStrength={0.38}
linkPalette={['#7048E8', '#4263EB', '#0CA678', '#F08C00']}
linkColorAccessor={(link) => linkColorByType(link.meta?.type)}
linkOpacityAccessor={(link) => linkOpacityByType(link.meta?.type)}
onNodeFocus={(event) =>
setFocusDetail(
`${event.node.name ?? event.node.id} • ${Math.round(event.node.value ?? 0)} active mentorship hours`
)
}
onNodeBlur={() => setFocusDetail(null)}
onLinkFocus={(event) => {
const sourceName = event.source.node?.name ?? event.link.source;
const targetName = event.target.node?.name ?? event.link.target;
setFocusDetail(`${sourceName} mentoring ${targetName}`);
}}
onLinkBlur={() => setFocusDetail(null)}
/>
{highlightText && (
<Text style={{ marginTop: 12, fontSize: 12, color: '#495057' }}>{highlightText}</Text>
)}
</>
);
}Microservice Latency
Loading demo…
import { NetworkChart } from '@plocks/charts';
import { DEPENDENCIES, SERVICES } from './data';
const latencyToColor = (latency: number) => {
if (latency <= 150) return '#12B886';
if (latency <= 220) return '#FAB005';
return '#FA5252';
};
const latencyToOpacity = (latency: number) => {
if (latency >= 250) return 0.9;
if (latency >= 200) return 0.7;
return 0.5;
};
export function Demo() {
return (
<NetworkChart
title="Microservice latency map"
subtitle="Edge-to-core call graph with weighted latency"
h={460}
nodes={SERVICES}
links={DEPENDENCIES}
showLabels
nodeRadius={12}
nodeRadiusRange={[10, 28]}
linkWidthRange={[1.2, 4.6]}
linkColorAccessor={(link) => latencyToColor(Number(link.meta?.latency ?? 0))}
linkOpacityAccessor={(link) => latencyToOpacity(Number(link.meta?.latency ?? 0))}
/>
);
}Risk Propagation
Loading demo…
import { NetworkChart } from '@plocks/charts';
import { PROPAGATION, SYSTEMS } from './data';
const severityToColor = (severity?: string) => {
switch (severity) {
case 'critical':
return '#FA5252';
case 'major':
return '#FD7E14';
case 'minor':
return '#FAB005';
default:
return '#ADB5BD';
}
};
const severityToOpacity = (severity?: string) => {
switch (severity) {
case 'critical':
return 0.88;
case 'major':
return 0.68;
case 'minor':
return 0.55;
default:
return 0.45;
}
};
export function Demo() {
return (
<NetworkChart
title="Risk propagation path"
subtitle="Simulated attack progression across services"
h={420}
nodes={SYSTEMS}
links={PROPAGATION}
showLabels
nodeRadius={12}
nodeRadiusRange={[10, 26]}
linkWidthRange={[1.1, 3.9]}
linkColorAccessor={(link) => severityToColor(link.meta?.severity)}
linkOpacityAccessor={(link) => severityToOpacity(link.meta?.severity)}
/>
);
}Supply Chain Relationships
Loading demo…
import { NetworkChart } from '@plocks/charts';
import { LINKS, NODES } from './data';
const riskToColor = (risk?: string) => {
switch (risk) {
case 'high':
return '#FA5252';
case 'medium':
return '#FCC419';
case 'low':
return '#51CF66';
default:
return '#ADB5BD';
}
};
const riskToOpacity = (risk?: string) => {
switch (risk) {
case 'high':
return 0.85;
case 'medium':
return 0.65;
case 'low':
return 0.55;
default:
return 0.45;
}
};
export function Demo() {
return (
<NetworkChart
title="Supply chain relationship map"
subtitle="Tiered flow from suppliers to regional distribution"
h={440}
layout="coordinate"
nodes={NODES}
links={LINKS}
showLabels
nodeRadius={12}
nodeRadiusRange={[10, 24]}
linkWidthRange={[1.2, 4.2]}
linkColorAccessor={(link) => riskToColor(link.meta?.risk)}
linkOpacityAccessor={(link) => riskToOpacity(link.meta?.risk)}
grid={false}
xAxis={{ show: false }}
yAxis={{ show: false }}
/>
);
}Related charts
Further reading
React Native design for iOS, Android, and Web.
Quick Links
Resources