igraph: легенда для веса ребер и размера вершины, масштабирования размера вершины, выделения из атрибута узлов - PullRequest
0 голосов
/ 24 января 2020

1) Я пытаюсь отобразить легенду для сетевого графика igraph для размера вершины, для которого был задан вес, и для толщины края, который также был установлен для веса. Я попытался использовать базовую легенду R для размера вершины, но она получается невероятно насыщенной и нечитаемой независимо от того, сколько настроек я делаю. В настоящее время, используя легенду base r, я вручную устанавливаю размер узла, который технически искажает данные на графике. Я понятия не имею, как создать легенду ширины края. Я хочу, чтобы размер узла равнялся общему количеству публикаций из списка узлов, а размер ребра соответствовал общим публикациям из списка ребер.

2) Второе, что я хочу сделать, - это изменить размер вершины. Большие вершины слишком велики, что делает маленькие вершины почти невидимыми. Если я просто изменю масштаб, все маленькие станут еще меньше - почти невидимыми. Есть ли способ установить максимальный диаметр для больших вершин, чтобы вы могли видеть маленькие точки, в то время как большие вершины не слишком мощные?

3) Третье, что я хочу сделать, это создать то же самое изображение, но только показать имена тех из определенных отделов. Например, в моем блоке данных nodeds я хочу, чтобы на приведенном ниже графике отображались только фамилии тех, кто находится в отделе «Рак». Проблема, с которой я сталкиваюсь, заключается в том, что переменная Department находится в кадре данных узлов, а не в net tbl_graph ().

Я знаю, что это много! Я потратил около 2 недель на это, поэтому любая помощь по любому из этих трех пунктов очень ценится. Приоритет определенно легенда.

nodes dataframe first few lines

edges dataframe first few lines

Current plot with names removed for confidentiality reasons

Current legend extremely squished and unable to view on the same page as plot

net <- igraph::graph_from_data_frame(d=edges, vertices=nodes, directed=T)
V(net)$size <- V(net)$Total_Publications/5
size <- V(net)$Total_Publications/5

#create Edge size
E(net)$width <- E(net)$Shared_Publications/5
#simple
net <- simplify(net, remove.multiple = F, remove.loops=T)


#Set layouts
nice <- layout_nicely(net)
nice_scaled <- norm_coords(nice, ymin = 0, ymax = .5, xmin = -1, xmax=.8)


#Set node size for scale manually which misrepresents data
size_nodes <- c(5, 45, 95, 145, 195)
sizenodesScale <- size_nodes
#PlotNet
plot(net, edge.arrow.size=0,
     edge.curved=.5, 
     rescale=F,
     layout=nice_scaled/5, 
     vertex.label.cex=.8, 
     vertex.label.family="Helvetica", 
     vertex.label.color="black",
     vertex.label.font=2,
     vertex.size=size,
     main="Collaboration",
     vertex.color = "lightgray",
     vertex.frame.color="black",
     vertex.shape="circle",
     vertex.label.dist=2,
     #vertex.size = net_size,
     edge.color="royalblue")

#add legend manually: very squished and unreadable
legend("topleft", legend=size_nodes, pt.cex=sizenodesScale/19, col='black',pch=21,pt.bg="lightgray", cex=1.7, y.intersp = 2.5, x.intersp=1.7, horiz=TRUE)
...