A library for embedding graphs in 2D space, using force-directed layouts.
Project description
Graph Force
A python/rust library for embedding graphs in 2D space, using force-directed layouts.
Installation
pip install graph_force
Usage
The first parameter defines the number of nodes in graph. The second parameter is an iterable of edges, where each edge is a tuple of two integers representing the nodes it connects. Node ids start at 0.
import graph_force
edges = [(0, 1), (1, 2), (2, 3), (3, 0)]
pos = graph_force.layout_from_edge_list(4, edges)
Example with networkx
This library does not have a function to consume a networkx graph directly, but it is easy to convert it to an edge list.
import networkx as nx
import graph_force
G = nx.grid_2d_graph(10, 10)
# we have to map the names to integers
# as graph_force only supports integers as node ids at the moment
edges = []
mapping = {n: i for i, n in enumerate(G.nodes)}
i = 0
for edge in G.edges:
edges.append((mapping[edge[0]], mapping[edge[1]]))
pos = graph_force.layout_from_edge_list(len(G.nodes), edges, iter=1000)
nx.draw(G, {n: pos[i] for n, i in mapping.items()}, node_size=2, width=0.1)
Example with edge file
This methods can be used with large graphs, where the edge list does not fit into memory.
Format of the file:
- Little endian
- 4 bytes: number of nodes(int)
- 12 bytes: nodeA(int), nodeB(int), weight(float)
import graph_force
import struct
with open("edges.bin", "rb") as f:
n = 10
f.write(struct.pack("i", n))
for x in range(n-1):
f.write(struct.pack("iif", x, x+1, 1))
pos = graph_force.layout_from_edge_file("edges.bin", iter=50)
Options
iter
, threads
and model
, initial_pos
are optional parameters, supported by layout_from_edge_list
and layout_from_edge_file
.
pos = graph_force.layout_from_edge_list(
number_of_nodes,
edges,
iter=500, # number of iterations, default 500
threads=0, # number of threads, default 0 (all available)
model="spring_model", # model to use, default "spring_model", other option is "networkx_model"
initial_pos=[(0.4, 0.7), (0.7, 0.2), ...], # initial positions, default None (random)
)
Available models
spring_model
: A simple spring model (my own implementation)networkx_model
: Reimplementation of the spring model from networkx
Contributing
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file graph_force-0.2.2.tar.gz
.
File metadata
- Download URL: graph_force-0.2.2.tar.gz
- Upload date:
- Size: 11.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.14.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 35fbf8d815001c709d1f27ff72e6b797703b51265f6e10a7e37cb3c8ae1fb741 |
|
MD5 | 717489893aa66cce1735470fe25d817a |
|
BLAKE2b-256 | a4b9176345460b36287b1ed4b6424a0ece1a304e51a0fc3f4ec388cf71abd1b3 |
File details
Details for the file graph_force-0.2.2-cp311-cp311-manylinux_2_28_x86_64.whl
.
File metadata
- Download URL: graph_force-0.2.2-cp311-cp311-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 220.6 kB
- Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.14.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9bc194d65b3916903240fac58951e08c032ec08557337ad88e601df73395ea3e |
|
MD5 | 2bf792cbc3852a8bc8e1ff9db066e3fd |
|
BLAKE2b-256 | aaa1716d09f4cebd4a794a82b98e4b7c02ba5e1d54d01c26f5becd57f0bc1d8c |