
Security News
pnpm 10.16 Adds New Setting for Delayed Dependency Updates
pnpm's new minimumReleaseAge setting delays package updates to prevent supply chain attacks, with other tools like Taze and NCU following suit.
@acdh/network-visualization
Advanced tools
This is a React component to visualize graph data in 2D and 3D. It is based on
force-graph
and
3d-force-graph
, which use
d3-force
and
d3-force-3d
for the simulation.
Install it as a package from NPM:
npm i @acdh/network-visualization
You can also include the UMD build in a script
tag, and access the components
on the NetworkVisualization
global:
<script src="network-visualization.umd.js"></script>
The UMD build is also available via CDN:
<script src="https://unpkg.com/@acdh/network-visualization@0/lib/network-visualization.umd.js"></script>
When using the UMD build, make sure to also include react
and, if you plan to
use the 3D component, three
(note that three
does not follow semantic
versioning, last known working version is 0.126.1):
<script
crossorigin
src="https://unpkg.com/react@16/umd/react.production.min.js"
></script>
<script
crossorigin
src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"
></script>
<script
crossorigin
src="https://unpkg.com/three@0.126.1/build/three.min.js"
></script>
See the examples folder
for how to use the UMD build.
The package exports three components: the basic <Visualization />
and
<Visualization3D />
components, and a <SelectionControls />
component that
wraps the visualization components and handles selecting/deselecting nodes in
the graph.
For a 2D visualization:
import React from 'react'
import { Visualization } from '@acdh/network-visualization'
const MyComponent = props => (
<div style={{ position: 'relative', width: '600px', height: '600px' }}>
<Visualization
graph={{
nodes: [
{ id: 'n1', label: 'Node 1', type: 't1' },
{ id: 'n2', label: 'Node 2', type: 't2' },
{ id: 'n3', label: 'Node 3', type: 't2' },
],
edges: [
{ id: 'e1', label: 'Edge 1', source: 'n1', target: 'n2', type: 'r1' },
{ id: 'e2', label: 'Edge 2', source: 'n1', target: 'n3', type: 'r1' },
],
types: {
nodes: [
{ id: 't1', label: 'Category 1', color: '#006699' },
{ id: 't2', label: 'Category 2', color: '#669900' },
],
edges: [{ id: 'r1', label: 'Relation 1', color: '#990066' }],
},
}}
/>
</div>
)
The graph
prop is the only required prop. It must include the graph's nodes
and edges, as well as a types
object describing the node and edge types. All
entities in the graph can have an optional label
and a color
, where labels
and colors defined on individual nodes/edges take precedence over labels and
colors defined for node types/edge types.
Note that nodes
, edges
, types.nodes
and types.edges
can be provided as
arrays, or as objects mapped by id
, e.g.:
{
nodes: {
n1: {
id: 'n1'
},
n2: {
id: 'n2',
},
},
}
When the graph data changes during the lifetime of the component, by default new
nodes and edges will be added to the previously provided graph. If you want to
replace a graph, you can add the replace
property to the graph object:
{
nodes: [],
edges: [],
types: {
edges: [],
nodes: []
},
+ replace: true,
}
Click interactions which allow selecting/deselecting nodes can be added with the
<SelectionControls />
component:
import React from 'react'
import { SelectionControls as Visualization } from '@acdh/network-visualization'
const MyComponent = props => (
<div style={{ position: 'relative', width: '600px', height: '600px' }}>
<Visualization dimensions={3} graph={props.graph} />
</div>
)
By default, SelectionControls
is an uncontrolled component, i.e. it holds the
state of selected nodes internally. It is possible to switch it to a controlled
component by providing a Set
of ids with the selectedNodeIds
prop.
You can view a live example of the components in storybook, by either locally
running npm run storybook
, or
here.
prop | type | default | description |
---|---|---|---|
backgroundColor | string | Canvas color | |
dagMode | string | null | null | Layout mode for directed acyclical graphs |
graph | object | Graph data, see above for the expected format | |
height | number | container height | Canvas height |
highlightedNodeIds | Set<string> | Ids of highlighted nodes | |
onNodeClick | function | Event callback fired when clicking on a node. Receives an object with { node, graph, forceGraph } as argument | |
onSimulationEnd | function | Event callback fired when simulation ends | |
onSimulationTick | function | Event callback fired every simulation tick | |
onZoom | function | Event callback fired on every zoom/pan interaction | |
selectedNodeIds | Set<string> | Ids of selected nodes | |
showNeighborsOnly | bool | false | Only how neighbors of selected nodes |
width | number | container width | Canvas width |
Has all props from <Visualization />
, and adds:
prop | type | default | description |
---|---|---|---|
dimensions | number | 2 | 2D or 3D layout |
onNodeDeselect | function | Event callback fired when node is deselected. Receives the node object as argument (and the set of currently selected node ids when used as an uncontrolled component) | |
onNodeSelect | function | Event callback fired when node is selected. Receives the node object as argument (and the set of currently selected node ids when used as an uncontrolled component) |
FAQs
React component to visualize graph data in 2D and 3D
We found that @acdh/network-visualization demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm's new minimumReleaseAge setting delays package updates to prevent supply chain attacks, with other tools like Taze and NCU following suit.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.