我试图使用map和ggplot2包在R中获得一个Choropleth地图。我很有兴趣只代表具体国家和具体价值。我的数据如下:
GEO<-c("ES","GB","FR","DE","DK","AT","PT")
Value<-c(0.2560,0.023,0.0120,0.158,0.0025,0.158,0.2)
countries=c("Spain","Great Britain","France","German","Denmark","Austria","UK")
datar<-data.frame(GEO,Value,countries)
datar $ GEO对应于国家/地区的ISO 2代码名称。
我使用这个脚本获得了一个Choropleth地图:
mapa<-fortify(map(regions=datar$countries,col="grey20",fill=TRUE,plot=FALSE))
gg <- ggplot()
gg <- gg + geom_map(data=mapa, map=mapa,
aes(x=long, y=lat, map_id=region),
fill="white", color="black")
gg<- gg +geom_map(data=datar, map=mapa,
aes(map_id=countries,fill=Value),color="blue",size=0.25)
gg <- gg + coord_map()
gg <- gg + theme_bw()
gg
第一个问题是Grate Britain不在图片中。我试图将命名法改为&#34; UK&#34;。这是最糟糕的,因为它代表纳米比亚而非英格兰..我试图寻找正确的英国名称,但没有找到任何东西!有人知道吗? datar $ GEO甚至不会产生一个图[Error en seq_len(nrow(data) - 1):参数必须可以强制转换为非负整数]
二。我想创建一个从0到0.5的红色色标。我应该在哪里以及如何做到这一点?
最后,我如何删除纬度和长数,以及背景线和正方形。
谢谢!
答案 0 :(得分:2)
实际上有一个简单的解决方法。 data.frame()默认情况下将字符向量更改为一个因子,这可能会以多种方式混淆代码。您可能会看到关于此的警告:
Warning message:
In `[<-.factor`(`*tmp*`, iexp, value = "UK$)|(^UK:") :
invalid factor level, NA generated
所以你确实需要使用&#34; UK&#34;而不是&#34;英国&#34;或&#34;英国&#34;,但使用
可以避免使用NAmibiadatar <- data.frame(GEO,Value,countries, stringsAsFactors=FALSE)
由于对英国&#34; uk&#34; vs&#34;乌克兰&#34;。我将在下一版本(3.2)的地图中解决这个问题。
答案 1 :(得分:1)
geom_map()
处理总是有点痛苦,我学会了。
英国的正确代码确实是UK
,但与您搜索的其他国家相反,它有子区域。仅搜索UK
将返回NA
,此(奇怪)将返回NAmibia
。
解决方案是搜索UK:
。
顺便说一下,您可以使用map_data()
代替fortify(map(..))
。
library(ggplot2)
library(maps)
datar <- data.frame(GEO = c("ES","UK","FR","DE","DK","AT","PT"),
Value = c(0.2560,0.023,0.0120,0.158,0.0025,0.158,0.2),
search_countries = factor(c("Spain","UK:","France","Germany","Denmark","Austria", "Portugal")),
countries = c("Spain","UK","France","Germany","Denmark","Austria", "Portugal")
)
mapa <- map_data('world', region = datar$search_countries)
我们仍然需要原来的countries
列,才能加入mapa
和datar
。
ggplot() +
geom_map(data = mapa, map = mapa, aes(x = long, y = lat,map_id = region)) +
geom_map(data = datar, map = mapa, aes(fill = Value, map_id = countries), color ='black', size = .25) +
coord_map()
#> Warning: Ignoring unknown aesthetics: x, y
这就是geom_map
古怪出现的地方。但是你可能已经知道了,因为你正确地绘制了两个geom_map
和关于所需的但是警告x
&amp; y
美学。
最后要做的是修复填充比例,并删除不需要的主题元素(使用theme_void()
可以获得相同的结果)
last_plot() +
scale_fill_gradient(low = 'white', high = 'red', limits = c(0, .5)) +
theme(panel.background = element_rect(colour = 'black', fill = 'white'),
axis.line = element_blank(),
axis.ticks = element_blank(),
axis.text = element_blank(),
axis.title = element_blank())