Я пытался использовать пакет igraph
в R для построения графика сети, где каждая пара узлов имеет взвешенное соотношение между -4 и 4 (-4 означает «как можно дальше друг от друга») Когда я строил график Исходя из данных, я смог использовать вес для аннотирования толщины ссылок, но не влиял на макет. Обрезка «худших» ребер помогает немного, но затем приводит к тому, что слабосвязанные узлы падают с графика, см. № 64 и № 119 в этом примере, и, похоже, узлы с «низким» значением не очень хорошо разводят. В конечном итоге я хочу, чтобы узлы отображались как можно ближе к «похожим» узлам и как можно дальше от разных узлов. (редактирование: изменение Weight
на weight
в файле данных помогло, переформулирует вопрос, чтобы более четко задавать его)
у меня есть код, и я примерил здесь образцы дат: https://www.dropbox.com/s/kuqo3a8twa149gd/paris_rouen.zip?dl=0
datefile_base <- "paris_rouen_utrecht"
nodes <- read.csv(paste(datefile_base, "-nodes.csv", sep=""), header=T, as.is=T)
links <- read.csv(paste(datefile_base, "-edge.csv", sep=""), header=T, as.is=T)
library(igraph)
require(stats)
net <- graph_from_data_frame(d=links, vertices=nodes, directed=F)
simplify(net, edge.attr.comb=list(weight="sum","ignore"))
translucent <- rainbow(5, alpha=.5)
V(net)$color <- translucent[V(net)$UseNumber]
plot.new
cut.off <- quantile(links$Weight)["75%"]
net.sp <- delete_edges(net, E(net)[Weight<cut.off])
layout_with_fr(net.sp)
plot(net.sp)
legend("topleft", c("Paris","Rouen", "Utrecht", "Unknown"), pch=21,
col="#777777", pt.bg=translucent, pt.cex=2, cex=.8, bty="n", ncol=1)