按地区着色国家/地区ggplot2(R):

时间:2017-09-14 10:39:55

标签: r ggplot2

我一直在努力教自己R并遇到了问题。抱歉,如果这是一个愚蠢的问题,但我似乎无法在其他主题中找到答案。

我试图绘制世界地图。我可以绘制一个颜色因国家而异的世界地图。我的代码是:

library("maptools")
library("tidyverse")

data("wrld_simpl")
new_wrld <- fortify(wrld_simpl, region = "NAME")

#new_tab<-data.frame(wrld_simpl$NAME,as.character(wrld_simpl$REGION))
#colnames(new_tab)<-c("id","region_num")
#str(new_wrld)
#new_wrld<-merge(new_wrld,new_tab, by.x = "id", by.y = "id")
#new_wrld$region_num<-as.character(new_wrld$region_num)
#str(new_wrld)

gg<- ggplot(data = new_wrld, aes(x = long, y = lat, map_id = id, fill = id))+ geom_map(map = new_wrld, color = "Black")
gg<- gg + theme(panel.background = element_rect(fill = "lightblue"),
                panel.grid = element_blank(),
                legend.position = "None")
gg<- gg + xlim(-180,180) + ylim(-90,90)
gg

正如您可能猜到的那样,在注释掉的行中我试图提取区域(读取:大陆)并将其合并到我的数据框中,以便我可以按大陆而不是按国家/地区为地图着色。从两次调用的输出到str(),据我所知,我实现了这一点:唯一的区别是添加了第八个变量new_wrld $ region_num。但是一旦我取消注释该块并运行代码,我就会收到错误:

Error in unit(x, default.units) : 'x' and 'units' must have length > 0

我不知道为什么。我的计划是改变&#34; fill = id&#34;在ggplot()中调用&#34; fill = region_num&#34;制作一幅每个大陆的地图,以不同的颜色着色。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以单独保存合并的数据集,&amp;用它来定义填充调色板,同时保留地图的原始强化数据集:

new_wrld2 <- merge(new_wrld,new_tab, by.x = "id", by.y = "id")

ggplot(data = new_wrld2, 
       aes(x = long, y = lat, map_id = id, fill = region_num)) + 
  geom_map(map = new_wrld, color = "Black") + 
  theme(panel.background = element_rect(fill = "lightblue"),
        panel.grid = element_blank(),
        legend.position = "None") + 
  xlim(-180,180) + ylim(-90,90)

map