如何在R中向地图添加列(基于圆的大小)?

如何在R中向地图添加列(基于圆的大小)?,r,dictionary,polygon,spatial,R,Dictionary,Polygon,Spatial,我有两个名为a和b的数据集 a和b的分类如下: > class(a) [1] "SpatialPolygonsDataFrame" attr(,"package") [1] "sp" > class(b) [1] "data.frame" 我在a中添加了一列b,然后合并了它们 然后使用绘图(a)绘制地图: 但是我需要一张地图,其中包括大小不同的圆圈作为人口。因为您的dput只显示dput(head(c

我有两个名为
a
b
的数据集

a
b
的分类如下:

> class(a)
[1] "SpatialPolygonsDataFrame"

attr(,"package")
[1] "sp"
> class(b)
[1] "data.frame"
我在
a
中添加了一列
b
,然后合并了它们

然后使用
绘图(a)
绘制地图:


但是我需要一张地图,其中包括大小不同的圆圈作为人口。

因为您的
dput
只显示
dput(head(covid))的结果。
我决定只为提供的6个省绘制地图

您可以尝试使用软件包
sf
ggplot2

library(rnaturalearth) #get SA map
library(sf)
library(tidyverse)

#Covid data
covid <- structure(list(Province = c("EC", "FS", "GT", "KZ", "LM", "MP"), Cases = c(2748L, 208L, 2993L, 1882L, 132L, 103L), Population = c(11.56, 
                                                                    2.75, 12.27, 10.27, 5.4, 4.04)), row.names = c(NA, 6L), class = "data.frame")                                                                     
#Map as an sf object
map <- st_as_sf(ne_states(country="South Africa"))

#Modify the covid dataframe before merging 
covid <- covid %>%
  mutate(name = case_when(Province=="EC" ~ "Eastern Cape",
                          Province=="FS" ~ "Free State",
                          Province=="GT" ~ "Gauteng",
                          Province=="KZ" ~ "KwaZulu-Natal",
                          Province=="LM" ~ "Limpopo",
                          Province=="MP" ~ "Mpumalanga"))

#Merging covid data + map
covid <- st_as_sf(left_join(covid,map,by="name"))

#We want to create breaks in order to have the desired legend
covid <- covid %>%
  mutate(breaks = case_when(Cases > 45 & Cases < 107 ~ "45 to 107",
                            Cases > 107 & Cases < 147 ~ "107 to 147",
                            Cases > 147 & Cases < 1547 ~ "147 to 1547",
                            Cases > 1547 & Cases < 2846 ~ "1547 to 2846",
                            Cases > 2846 & Cases < 15396 ~ "2846 or + "))

covid %>%
  mutate(breaks=fct_relevel(breaks,"45 to 107","107 to 147","147 to 1547","1547 to 2846","2846 or + ")) %>% #we reorder the labels
  ggplot() + 
  geom_sf(aes(fill=breaks)) +
  scale_fill_manual(values=c("#feedde","#fdd0a2","#fd8d3c","#f16913","#d94801")) +
  geom_point(aes(x=longitude, y=latitude, size=Population),colour="grey70") +
  labs(fill="Cases") +
  theme_void()
library(rnaturalearth)#获取SA地图
图书馆(sf)
图书馆(tidyverse)
#新冠病毒数据
新冠病毒147&病例<1547~“147至1547”,
病例>1547例&病例<2846~“1547至2846”,
例数>2846及例数<15396~“2846或+”)
新冠病毒%>%
突变(中断=fct_releval(中断,“45至107”、“107至147”、“147至1547”、“1547至2846”、“2846或+”)%>%#我们重新排列标签
ggplot()+
geom_sf(aes(填充=断裂))+
刻度填充手册(数值=c(“#feedde”、“#fdd0a2”、“#fd8d3c”、“#f16913”、“#d94801”))+
地理点(aes(x=经度,y=纬度,大小=人口),color=“grey70”)+
实验室(fill=“Cases”)+
主题_void()


您当然可以通过使用适当的坐标参考系(查看
sf
软件包的文档)来改进结果。

我尝试使用您的命令,不幸的是,我在安装软件包tidyverse时收到错误,错误如下:
错误:loadNamespace(i,c(lib.loc,.libPaths()),versionCheck=vI[[i]])中的“tidyverse”的包或命名空间加载失败:命名空间“vctrs”0.3.5已加载,但需要>=0.3.6
@A.chrltI在
R
中找不到
ggplot
。我可以找到
ggplot 2
,但找不到
ggplot
!。我们有
ggplot
函数,但没有名为
ggplot
的包@你说得对,我打错了。确实是
ggplot2
。我编辑了我的答案。关于tidyverse,你可以看看