加载R包
library(tidyverse)
1. 创建需要绘制的国家名称
some.eu.countries <- c(
"Portugal", "Spain", "France", "Switzerland", "Germany",
"Austria", "Belgium", "UK", "Netherlands",
"Denmark", "Poland", "Italy",
"Croatia", "Slovenia", "Hungary", "Slovakia",
"Czech republic")
2. 从世界地图中提取出上述国家的位置信息
some.eu.maps <- map_data("world", region = some.eu.countries)
3. 创建国家名称标签
region.lab.data <- some.eu.maps %>%
group_by(region) %>%
summarise(long = mean(long), lat = mean(lat))
4. 创建需要展示的国家首都经纬度数据集
labs <- data.frame(
long = c(0.1278,2.3522,13.4050,12.5683,2.1734),
lat = c(51.5074,48.8566,52.5200,55.6761,41.3851),
names =c("London","Paris","Berlin","Copenhagen",
"Barcelona"))
countries_lines <- tibble(x = c(0.1278,2.3522,13.4050,12.5683),
xend = c(2.3522,13.4050,12.5683,0.1278),
y = c(51.5074,48.8566,52.5200,55.6761),
yend = c(48.8566,52.5200,55.6761,51.5074))
5. 数据可视化
ggplot(some.eu.maps, aes(x = long, y = lat)) +
geom_polygon(aes( group = group, fill = region)) -> p1
p1

p1 + geom_text(data = region.lab.data,aes(label = region),
size = 4, hjust = 0.5) -> p2
p2

p2 + geom_point(data = labs,aes(x = long, y = lat,color=names),
size = 3,show.legend = F)+
geom_point(aes(x =12.4964,y =41.9028),
color ="blue",size =3,show.legend = F) -> p3
p3

添加城市文本
p3 + geom_text(data = labs,aes(x = long,y = lat+0.5,
label=names),size=3,hjust=0.5)+
annotate("text",label = "Rome",
x =12.6, y =41.5028,size =3, colour = "black") -> p4
p4

p4 + geom_curve(data = countries_lines,
aes(x = x,xend=xend,y = y,yend = yend),
size=1,color="green",angle = 90,alpha=1,
arrow = arrow(length = unit(0.01, "npc")))+
geom_segment(aes(x = 2.1734,xend=12.4964,y = 41.3851,
yend = 41.9028),size=1,
color = "blue",inherit.aes=FALSE)+
scale_fill_viridis_d()+
theme_void()+
theme(legend.position = "none")

完整版代码
library(tidyverse)
some.eu.countries <- c(
"Portugal", "Spain", "France", "Switzerland", "Germany",
"Austria", "Belgium", "UK", "Netherlands",
"Denmark", "Poland", "Italy",
"Croatia", "Slovenia", "Hungary", "Slovakia",
"Czech republic")
some.eu.maps <- map_data("world", region = some.eu.countries)
region.lab.data <- some.eu.maps %>%
group_by(region) %>%
summarise(long = mean(long), lat = mean(lat))
labs <- data.frame(
long = c(0.1278,2.3522,13.4050,12.5683,2.1734),
lat = c(51.5074,48.8566,52.5200,55.6761,41.3851),
names =c("London","Paris","Berlin","Copenhagen",
"Barcelona"))
countries_lines <- tibble(x = c(0.1278,2.3522,13.4050,12.5683),
xend = c(2.3522,13.4050,12.5683,0.1278),
y = c(51.5074,48.8566,52.5200,55.6761),
yend = c(48.8566,52.5200,55.6761,51.5074))
ggplot(some.eu.maps, aes(x = long, y = lat)) +
geom_polygon(aes( group = group, fill = region))+
geom_text(data = region.lab.data,aes(label = region),
size = 4, hjust = 0.5) +
geom_point(data = labs,aes(x = long, y = lat,color=names),
size = 3,show.legend = F)+
geom_point(aes(x =12.4964,y =41.9028),
color ="blue",size =3,show.legend = F)+
geom_text(data = labs,aes(x = long,y = lat+0.5,
label=names),size=3,hjust=0.5)+
annotate("text",label = "Rome",
x =12.6, y =41.5028,size =3, colour = "black")+
geom_curve(data = countries_lines,
aes(x = x,xend=xend,y = y,yend = yend),
size=1,color="green",angle = 90,alpha=1,
arrow = arrow(length = unit(0.01, "npc")))+
geom_segment(aes(x = 2.1734,xend=12.4964,y = 41.3851,
yend = 41.9028),size=1,
color = "blue",inherit.aes=FALSE)+
scale_fill_viridis_d()+
theme_void()+
theme(legend.position = "none")
交互式文档