等值线图的问题

时间:2017-05-31 17:51:28

标签: r ggplot2 maps

我试图使用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

这里的地图:  enter image description here

第一个问题是Grate Britain不在图片中。我试图将命名法改为&#34; UK&#34;。这是最糟糕的,因为它代表纳米比亚而非英格兰..我试图寻找正确的英国名称,但没有找到任何东西!有人知道吗? datar $ GEO甚至不会产生一个图[Error en seq_len(nrow(data) - 1):参数必须可以强制转换为非负整数]

二。我想创建一个从0到0.5的红色色标。我应该在哪里以及如何做到这一点?

最后,我如何删除纬度和长数,以及背景线和正方形。

谢谢!

2 个答案:

答案 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;,但使用

可以避免使用NAmibia
datar <- 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列,才能加入mapadatar

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())