我希望能够在与图片编号相关的图表上创建一个带有圆圈的世界地图。
我试图使用mapBubbles,但在绘制图形时出错了。
我的数据文件如下:
ISO3V10 Country No of Documents Lat Lon
ARG Argentina 41 -64 -34
AUS Australia 224 133 -27
CAN Canada 426 -95 60
IRL Ireland 68 -8 53
ITA Italy 583 12.8333 42.8333
NLD Netherlands 327 5.75 52.5
NZL New Zealand 26 174 -41
ESP Spain 325 -4 40
GBR United Kingdom 2849 -2 54
USA United States 3162 -97 38
我写的代码如下:
# Thanks to Andrie for the reproducible code and Paolo for the suggested edit
zz <-"ISO3V10 Country No.of.Documents Lat Lon
ARG Argentina 41 -64 -34
AUS Australia 224 133 -27
CAN Canada 426 -95 60
IRL Ireland 68 -8 53
ITA Italy 583 12.8333 42.8333
NLD Netherlands 327 5.75 52.5
NZL 'New Zealand' 26 174 -41
ESP Spain 325 -4 40
GBR 'United Kingdom' 2849 -2 54
USA 'United States' 3162 -97 38
"
dF2 <- read.table(textConnection(zz), header = TRUE)
# dF2 <- read.delim(file="C:\\Users\\js207963\\Documents\\noofpublications_AllUpdated.txt", header = TRUE, sep = "\t")
dF2[]
par(mai=c(0,0,0.2,0),xaxs="i",yaxs="i")
mapBubbles(dF2=getMap(), nameZSize="No.of.Documents", nameZColour="Country",oceanCol="lightblue", landCol="wheat", addLegend=FALSE
所以问题是你可以帮我修改代码来正确绘制数据吗?
干杯, 杰斯
答案 0 :(得分:6)
您可以使用以下内容在ggplot
中进行绘制:
重新创建数据:
dat <- read.table(text="
ISO3V10 Country 'No of Documents' Lat Lon
ARG Argentina 41 -64 -34
AUS Australia 224 133 -27
CAN Canada 426 -95 60
IRL Ireland 68 -8 53
ITA Italy 583 12.8333 42.8333
NLD Netherlands 327 5.75 52.5
NZL 'New Zealand' 26 174 -41
ESP Spain 325 -4 40
GBR 'United Kingdom' 2849 -2 54
USA 'United States' 3162 -97 38
", header=TRUE)
加载包并绘图:
library(ggplot2)
library(maps)
mdat <- map_data('world')
str(mdat)
ggplot() +
geom_polygon(dat=mdat, aes(long, lat, group=group), fill="grey50") +
geom_point(data=dat,
aes(x=Lat, y=Lon, map_id=Country, size=`No.of.Documents`), col="red")
答案 1 :(得分:1)
您需要向mapBubbles
函数传递更多信息,因为您的数据框不是SpatialPolygonsDataFrame。以下内容应该有效(您Lat
和Lon
可能会被贴错标签):
mapBubbles(dF=dF2, nameZSize="No.of.Documents",
nameZColour="Country",oceanCol="lightblue", landCol="wheat",
addLegend=FALSE, nameX = "Lat", nameY = "Lon")
在上面,nameX
和nameY
被传递给函数以指示绘制气泡的位置。此外,将数据框dF2
传递给参数dF
,而不是调用getMap()
。
修改强>
我也喜欢Andrie对ggplot2
的回答(除此之外,空间比下图更好用),但由于你已经使用rworldmap
专门发布了其他问题,我认为适合坚持那个包裹。