cograph accepts network data in all common formats used in R. Pass
any supported object directly to splot() and it will be
automatically parsed.
A square numeric matrix where M[i,j] represents the edge
weight from node i to node j.
Sources:
cor(), cov() — correlation and covariance
matricesqgraph::getWmat() — extract weights from qgraph
objectsbootnet::estimateNetwork() — network estimation
outputpsychonetrics — structural equation modeling
networksmarkovchain — transition probability matricesas.matrix(dist()) — distance/dissimilarity
matricesAuto-detection:
rownames()/colnames()Usage:
# Create a weighted adjacency matrix
adj_matrix <- matrix(
c(0, 0.8, 0.5, 0.2,
0.8, 0, 0.6, 0,
0.5, 0.6, 0, 0.7,
0.2, 0, 0.7, 0),
nrow = 4, byrow = TRUE,
dimnames = list(c("A", "B", "C", "D"), c("A", "B", "C", "D"))
)
# Plot directly from matrix
splot(adj_matrix, title = "From Adjacency Matrix")
# Create a directed (asymmetric) matrix
directed_matrix <- matrix(
c(0, 0.9, 0, 0,
0.2, 0, 0.7, 0,
0.5, 0, 0, 0.8,
0, 0.3, 0.4, 0),
nrow = 4, byrow = TRUE,
dimnames = list(c("A", "B", "C", "D"), c("A", "B", "C", "D"))
)
# Directed networks detected automatically
splot(directed_matrix, title = "Directed Network (auto-detected)")A data frame where each row is an edge with source, target, and optional weight columns.
Sources:
igraph::as_data_frame(g, what = "edges")Column detection (case-insensitive):
| Purpose | Recognized names |
|---|---|
| Source | from, source, src,
v1, node1, i |
| Target | to, target, tgt,
v2, node2, j |
| Weight | weight, w, value,
strength |
Falls back to columns 1 and 2 if no match.
Usage:
# Create an edge list data frame
edges <- data.frame(
from = c("Alice", "Alice", "Bob", "Bob", "Carol", "Dave"),
to = c("Bob", "Carol", "Carol", "Dave", "Dave", "Alice"),
weight = c(0.9, 0.5, 0.7, 0.3, 0.8, 0.4)
)
print(edges)
#> from to weight
#> 1 Alice Bob 0.9
#> 2 Alice Carol 0.5
#> 3 Bob Carol 0.7
#> 4 Bob Dave 0.3
#> 5 Carol Dave 0.8
#> 6 Dave Alice 0.4
# Plot from edge list
splot(edges, title = "From Edge List")
# Alternative column names work too
edges_alt <- data.frame(
source = c("X", "X", "Y", "Z"),
target = c("Y", "Z", "Z", "X"),
value = c(1, 0.5, 0.8, 0.3)
)
splot(edges_alt, title = "Alternative Column Names")Objects of class igraph from the igraph package.
Sources:
graph_from_data_frame(),
graph_from_adjacency_matrix()make_graph("Zachary"), make_ring(),
sample_pa(), etc.read_graph() — import from GraphML, GML, Pajek, edge
listsintergraph::asIgraph() — convert from network
objectsPreserved:
V(g)$name, V(g)$color,
etc.E(g)$weight, E(g)$type,
etc.is_directed(g)Usage:
# Create igraph objects
g_ring <- igraph::make_ring(6)
igraph::V(g_ring)$name <- LETTERS[1:6]
splot(g_ring, title = "igraph Ring Graph")
# Famous graph with vertex names
g_zachary <- igraph::make_graph("Zachary")
splot(g_zachary, title = "Zachary Karate Club")
# Weighted graph
g_weighted <- igraph::graph_from_adjacency_matrix(
adj_matrix,
mode = "undirected",
weighted = TRUE
)
splot(g_weighted, title = "Weighted igraph")Objects of class network from the network/statnet
ecosystem.
Sources:
network::network() — create from matrix or edge
listergm package — exponential random graph modelssna package — social network analysisintergraph::asNetwork() — convert from igraphPreserved:
%v% operator%e% operatoris.directed()Usage:
# Create a network object
net_obj <- network::network(adj_matrix, directed = FALSE)
splot(net_obj, title = "From statnet network")Objects created by the qgraph package.
Sources:
qgraph::qgraph(..., DoNotPlot = TRUE)bootnet::estimateNetwork() resultspsychonetrics model outputsPreserved:
q$layoutq$Edgelistq$graphAttributes$NodesUsage:
# Create a qgraph object (without plotting)
q <- qgraph::qgraph(adj_matrix, DoNotPlot = TRUE)
# Plot with cograph (preserves layout)
splot(q, title = "From qgraph Object")Objects of class tna from the tna package (Transition
Network Analysis).
Sources:
tna::tna() — build from sequence datatna::group_tna() — grouped transition analysisExtracted:
$weights$labels$initsUsage:
library(tna)
# Build TNA model from included dataset
tna_model <- tna(group_regulation)
# Plot TNA model directly
splot(tna_model, title = "From TNA Model")
# With donut nodes showing initial probabilities
splot(tna_model,
node_shape = "donut",
donut_fill = tna_model$inits,
title = "TNA with Initial Probabilities")| Parameter | Effect |
|---|---|
weight_digits = 2 |
Round weights; edges rounding to zero are removed |
threshold = 0.3 |
Remove edges with |weight| < threshold |
minimum = 0.3 |
Alias for threshold (qgraph compatibility) |
maximum = 1.0 |
Set reference maximum for edge width scaling |
edge_scale_mode |
"linear", "sqrt", "log", or
"rank" |
# Create a network with varying weights
weights_matrix <- matrix(
c(0, 0.1, 0.5, 0.9,
0.1, 0, 0.2, 0.7,
0.5, 0.2, 0, 0.3,
0.9, 0.7, 0.3, 0),
nrow = 4, byrow = TRUE,
dimnames = list(LETTERS[1:4], LETTERS[1:4])
)
# Apply threshold to remove weak edges
splot(weights_matrix, threshold = 0.4, title = "Threshold = 0.4 (weak edges removed)")| Feature | Behavior |
|---|---|
| Negative weights | Colored differently (green/red by default) |
| Self-loops | Rendered as loops; control angle with
loop_rotation |
| Reciprocal edges | Curved apart automatically in directed networks |
| Duplicate edges | Error by default; use edge_duplicates to aggregate |
# Network with negative weights (e.g., correlation matrix)
cor_matrix <- matrix(
c(1, 0.8, -0.5, 0.3,
0.8, 1, 0.2, -0.7,
-0.5, 0.2, 1, 0.4,
0.3, -0.7, 0.4, 1),
nrow = 4, byrow = TRUE,
dimnames = list(LETTERS[1:4], LETTERS[1:4])
)
diag(cor_matrix) <- 0
splot(cor_matrix, title = "Negative Weights (red = negative)")cograph provides functions to convert between formats. All conversion functions accept any supported input type.
Convert any format to a cograph_network object.
Accepted inputs:
matrix — Adjacency/weight matrixdata.frame — Edge list with from/to/weight columnsigraph — igraph objectnetwork — statnet network objectqgraph — qgraph objecttna — TNA model objectgroup_tna — Grouped TNA model object# From matrix
net <- as_cograph(adj_matrix)
print(net)
#> Cograph network: 4 nodes, 5 edges ( undirected )
#> Source: matrix
#> Nodes (4): A, B, C, D
#> Edges: 5 / 6 (density: 83.3%)
#> Weights: [0.200, 0.800] | mean: 0.560
#> Strongest edges:
#> A -- B 0.800
#> C -- D 0.700
#> B -- C 0.600
#> A -- C 0.500
#> A -- D 0.200
#> Layout: none
# From edge list
net_edges <- as_cograph(edges)
print(net_edges)
#> Cograph network: 4 nodes, 6 edges ( undirected )
#> Source: edgelist
#> Data: data.frame (6 x 3)
#> Nodes (4): Alice, Bob, Carol, Dave
#> Weights: 0.3 to 0.9
#> Layout: none
# Override auto-detected directedness
net_directed <- as_cograph(adj_matrix, directed = TRUE)
cat("Directed:", attr(net_directed, "directed"), "\n")
#> Directed:# From igraph
g <- igraph::make_ring(5)
igraph::V(g)$name <- LETTERS[1:5]
net_from_igraph <- as_cograph(g)
print(net_from_igraph)
#> Cograph network: 5 nodes, 5 edges ( undirected )
#> Source: igraph
#> Nodes (5): A, B, C, D, E
#> Weights: 1 (all equal)
#> Layout: noneThe function is idempotent — passing a cograph_network
returns it unchanged.
Convert any format to an igraph object:
# From matrix
g <- to_igraph(adj_matrix)
cat("Vertices:", igraph::vcount(g), "\n")
#> Vertices: 4
cat("Edges:", igraph::ecount(g), "\n")
#> Edges: 5
# From cograph_network
net <- as_cograph(adj_matrix)
g2 <- to_igraph(net)
# Check attributes preserved
cat("Vertex names:", paste(igraph::V(g2)$name, collapse = ", "), "\n")
#> Vertex names: A, B, C, DConvert any format to an edge list data frame:
# From matrix
df <- to_df(adj_matrix)
print(df)
#> from to weight
#> 1 A B 0.8
#> 2 A C 0.5
#> 3 A D 0.2
#> 4 B C 0.6
#> 5 C D 0.7
# From cograph_network
net <- as_cograph(adj_matrix)
df2 <- to_df(net)
print(df2)
#> from to weight
#> 1 A B 0.8
#> 2 A C 0.5
#> 3 B C 0.6
#> 4 A D 0.2
#> 5 C D 0.7Output columns: from, to,
weight
Convert any format to an adjacency matrix:
# From cograph_network
net <- as_cograph(edges)
mat <- to_matrix(net)
print(mat)
#> Alice Bob Carol Dave
#> Alice 0.0 0.9 0.5 0.4
#> Bob 0.9 0.0 0.7 0.3
#> Carol 0.5 0.7 0.0 0.8
#> Dave 0.4 0.3 0.8 0.0# From igraph (with weights)
g <- igraph::graph_from_adjacency_matrix(
matrix(c(0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0), 4, 4,
dimnames = list(c("W", "X", "Y", "Z"), c("W", "X", "Y", "Z"))),
mode = "undirected",
weighted = TRUE
)
mat <- to_matrix(g)
print(mat)
#> W X Y Z
#> W 0 1 0 1
#> X 1 0 1 0
#> Y 0 1 0 1
#> Z 1 0 1 0Returns a square numeric matrix with row/column names preserved.
Convert any format to a statnet network object:
# Convert matrix to statnet network
statnet_net <- to_network(adj_matrix)
print(statnet_net)
#> Network attributes:
#> vertices = 4
#> directed = FALSE
#> hyper = FALSE
#> loops = FALSE
#> multiple = FALSE
#> bipartite = FALSE
#> total edges= 5
#> missing edges= 0
#> non-missing edges= 5
#>
#> Vertex attribute names:
#> vertex.names
#>
#> Edge attribute names:
#> weightRequires the network package. Preserves edge weights and
vertex names.
| Function | Output | Use Case |
|---|---|---|
as_cograph() / to_cograph() |
cograph_network |
Import for visualization with splot |
to_igraph() |
igraph |
Use igraph’s analysis functions |
to_df() |
data.frame |
Export to CSV, database, or other tools |
to_matrix() |
matrix |
Export to adjacency matrix for other packages |
to_network() |
network |
Use with statnet/ergm ecosystem |
| Input | Class | Directed | Weights | Labels |
|---|---|---|---|---|
| Matrix | matrix |
Symmetry check | Cell values | dimnames |
| Edge list | data.frame |
Reciprocal check | weight column | Unique nodes |
| igraph | igraph |
is_directed() |
weight attr | name attr |
| network | network |
is.directed() |
weight attr | vertex.names |
| qgraph | qgraph |
Edgelist | Edgelist | Node names |
| tna | tna |
Always TRUE | $weights |
$labels |