显示你的论文引用地图
显示你的论文引用地图 by 方圆之处
在Web of Science里,你可以生成一个漂亮的论文引用地图。在这篇文章中,我将展示如何从Web of Science中下载引用数据和如何在R中绘制论文引用地图。
在Web of Science中,引用数据的链接并不好找。但是因为引用地图是展示在网页上的,那么其实引用数据会被浏览器下载到本地。因此现在的问题是如何找到引用数据。
在下文中,我只以Chrome浏览器为例。
第一步:登录到你的个人Web of Science上。
第二步:在Chrome中打开Developer Tools,有两种方法可以打开:
在网页上右击鼠标,然后选择"Inspect"。 在Chrome的菜单栏,View -> Developer -> Developer’s Tools。
第三步:在你的个人Web of Science中,点击“My research profile”.
第四步:在这个页面中,点击“Open dashboard”。
第五步:向下滚动网页,直至“Geographic Citation Map”,现在这里是模糊的,点击“Click to show map”。
第六步:在Developer Tool中,点击“Netowrk”标签(在最上面一行)。你可能会看到有很多的文件正在下载。当所有文件下载完毕,双击natigation_poin.svg
上的那一个文件(路径名为?task_id=...
,往往是文件大小最大的那一个)。
双击之后会打开一个网页,其中包含了一个json文件,这个json文件中包含了绘制引用地图的所有数据。
第七步:将此json保存到文件中,例如通过“Ctrl + s”。我们假设这个文件为citation.json
。可惜这个json文件并不能直接被jsonlite或者rjson包导入(肯能它并不是真正的json文件)。我们需要对此进行一个简单的修改。
citation.json
其实包含了合法的JavaScript命令。我们额外的将其赋予一个变量。在citation.json
文件中,我们只需要简单的在开头加上citation =
。我们假设这个变量名为citation
。
第八步:现在我们可以通过使用V8包来执行citation.json
中的JavaScript代码。
library(V8)
ct = v8()
ct$source("~/citation.json")
## [1] "[object Object]"
第九步:将JavaScript变量citation
导入R中,这个以通过ct
的get()
方法进行。
citation = ct$get("citation")
到现在为止,我们已经获取了引用数据,下面我们开始在R中对此数据进行处理。
在这里我不会展示citation
变量的全部内容,因为这个有一点复杂。citation
是一个列表,这个我只取其results
的元素。results
元素是一个数据框。同时我只取results
的前四列,因为第五列包含了引用论文的详细信息,例如作者,论文标题,我们下面的可视化不需要这些。
results = citation$results[, 1:4]
head(results)
## address publicationCount lat lon
## 1 Putian, China 2 25.35331 119.05826
## 2 Blacksburg, United States 10 37.22957 -80.41394
## 3 Richmond, United States 7 37.55376 -77.46026
## 4 Toronto, Canada 328 43.64455 -79.40712
## 5 New Haven, United States 75 41.30815 -72.92816
## 6 Sydney, Australia 135 -33.86785 151.20732
现在在变量results
中,其中有地理位置坐标(lat
和lon
)。这两列可以绘制到地图上。
下面的代码不是必须的。因为在同一个城市可能会有多所大学或者研究所,这只是将其汇集到一条记录里。如果你想区分不同的大学和研究所,你可以跳过下面这段代码,直接使用results
.
tb = data.frame(address = tapply(results$address, results$address, function(x) x[1]),
publicationCount = tapply(results$publicationCount, results$address, sum),
lat = tapply(results$lat, results$address, mean),
lon = tapply(results$lon, results$address, mean))
最后我们绘制引用地图。这里我参考了网上的一个绘制地理地图的教程(https://r-spatial.org/r/2018/10/25/ggplot2-sf.html).
library("sf")
library("rnaturalearth")
library("rnaturalearthdata")
world = ne_countries(scale = "medium", returnclass = "sf")
library(ggplot2)
library(ggrepel)
library(RColorBrewer)
ggplot(data = world) + geom_sf(color = "grey", fill = NA) +
geom_point(data = tb[order(tb$publicationCount), ],
aes(x = lon, y = lat, color = publicationCount, size = publicationCount)) +
scale_colour_gradientn(colours = rev(brewer.pal(9, "Spectral"))) +
scale_size(range = c(0.2, 3)) +
geom_text_repel(data = tb[order(-tb$publicationCount)[1:20], ],
mapping = aes(x = lon, y = lat, label = gsub(", .*$", "", address)),
box.padding = 0.5, max.overlaps = Inf, min.segment.length = 0, size = 3)
原文链接