2017-09-14 120 views
2

我一直在试图教自己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 

而我不知道为什么。然后,我的计划是将ggplot()调用中的“fill = id”更改为“fill = region_num”,以生成一个地图,其中每个大洲的阴影都是不同的颜色。

任何帮助将不胜感激。

回答

1

您可以保存单独的合并数据集,&使用,要在保持原有的强化数据集映射定义填充调色板:

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

相关问题