У меня есть некоторые авторы с их городом или страной принадлежности. Хотелось бы узнать, можно ли построить карту соавторов (рис. 1) на карте с координатами стран. Пожалуйста, рассмотрите несколько авторов из одной страны. [EDIT: несколько сетей могут быть сгенерированы, как в примере, и не должны показывать избегаемые перекрытия]. Это предназначено для десятков авторов. Желателен вариант масштабирования. Bounty обещает +50 для будущего ответа.
library(RefManageR)
library(network)
library(ggnet)
library(ggplot2)
library(sna)
refs5 <- read.table(text="
row bibtype year volume number pages title journal author
Bennett_1995 article 1995 76 <NA> 113--176 angiosperms. \"Annals of Botany\" \"Bennett Md, Leitch Ij\"
Bennett_1997 article 1997 80 2 169--196 estimates. \"Annals of Botany\" \"Bennett MD, Leitch IJ\"
Bennett_1998 article 1998 82 SUPPL.A 121--134 weeds. \"Annals of Botany\" \"Bennett MD, Leitch IJ, Hanson L\"
Bennett_2000 article 2000 82 SUPPL.A 121--134 weeds. \"Annals of Botany\" \"Bennett MD, Someone IJ\"
Leitch_2001 article 2001 83 SUPPL.A 121--134 weeds. \"Annals of Botany\" \"Leitch IJ, Someone IJ\"
New_2002 article 2002 84 SUPPL.A 121--134 weeds. \"Annals of Botany\" \"New IJ, Else IJ\"" , header=TRUE,stringsAsFactors=FALSE)
rownames(refs5) <- refs5[,1]
refs5<-refs5[,2:9]
citations <- as.BibEntry(refs5)
authors <- lapply(citations, function(x) as.character(toupper(x$author)))
unique.authors<-unique(unlist(authors))
coauth.table <- matrix(nrow=length(unique.authors),
ncol = length(unique.authors),
dimnames = list(unique.authors, unique.authors), 0)
for(i in 1:length(citations)){
paper.auth <- unlist(authors[[i]])
coauth.table[paper.auth,paper.auth] <- coauth.table[paper.auth,paper.auth] + 1
}
coauth.table <- coauth.table[rowSums(coauth.table)>0, colSums(coauth.table)>0]
diag(coauth.table) <- 0
coauthors<-coauth.table
bip = network(coauthors,
matrix.type = "adjacency",
ignore.eval = FALSE,
names.eval = "weights")
authorcountry <- read.table(text="
author country
1 \"LEITCH IJ\" Argentina
2 \"HANSON L\" USA
3 \"BENNETT MD\" Brazil
4 \"SOMEONE IJ\" Brazil
5 \"NEW IJ\" Brazil
6 \"ELSE IJ\" Brazil",header=TRUE,fill=TRUE,stringsAsFactors=FALSE)
matched<- authorcountry$country[match(unique.authors, authorcountry$author)]
bip %v% "Country" = matched
colorsmanual<-c("red","darkgray","gainsboro")
names(colorsmanual) <- unique(matched)
gdata<- ggnet2(bip, color = "Country", palette = colorsmanual, legend.position = "right",label = TRUE,
alpha = 0.9, label.size = 3, edge.size="weights",
size="degree", size.legend="Degree Centrality") + theme(legend.box = "horizontal")
gdata
Другими словами, добавление имен авторов, строк и пузырьков к карте. Обратите внимание, что несколько авторов могут быть из одного города или страны и не должны пересекаться. Рисунок 1 Сеть
EDIT: текущий ответ перекрывает две несвязанные сети. авторы "ELSE" и "NEW" должны быть отделены от других, как показано на рисунке 1. Рисунок 2: ответ, связанный