我改编了以下代码,取自here,以显示加权和无向网络图:
# Create data
set.seed(1)
data <- matrix(sample(0:3, 25, replace=TRUE), nrow=5)
data[lower.tri(data)] <- NA
rownames(data) <- LETTERS[1:5]
colnames(data) <- LETTERS[1:5]
# Transform it in a graph format
network <- graph_from_adjacency_matrix(data, weighted = TRUE)
# Remove edges with NA weights
network <- delete_edges(network, E(network)[is.na(E(network)$weight)])
# Make the graph
ggraph(network) +
geom_edge_link(aes(edge_width=E(network)$weight), edge_colour="black", edge_alpha=0.3) +
geom_node_point(color="#69b3a2", size=5) +
geom_node_text(aes(label=name), repel = TRUE, size=8, color="#69b3a2") +
theme_void() +
theme(
legend.position="none",
plot.margin=unit(rep(1,4), "cm")
)
但是,就我而言,较低的值表示更强的连接,因此我试图弄清楚如何创建一个图形,其中较小的值具有较厚的边缘,即反转
network$weight
的值。在此示例图中,D>C 的边缘最厚,A>C 的边缘最薄。
如果你的所有权重都是正数,你可以使用辅助函数来翻转值,例如
flip <- function(x) max(x)-x+1
flip(c(10, 9, 1))
# [1] 1 2 10
然后在映射边缘权重时使用它
geom_edge_link(aes(edge_width=flip(weight)), edge_colour="black", edge_alpha=0.3)