我正在尝试使用library(tmap)在某些值(例如收入)后为区域着色。 我在瑞典有一个shp文件,在xlsx文件中有一些incomedata。
首先,我导入数据:
map <- readOGR("Kommun_RT90_region.shp", encoding = "UTF-8")
kapital_kommun <- read_xlsx("kapital_edit2.xlsx")
这是map @ data的样子:
KnKod KnNamn
0 0114 Upplands Väsby
1 0115 Vallentuna
2 0117 Österåker
3 0120 Värmdö
4 0123 Järfälla
5 0125 Ekerö
KnKod是每个区域的官方密钥,KnNamn是该区域的名称。如果我运行以下代码,则会得到一张瑞典地图,每个290个地区的颜色都是唯一的:
tm_shape(map) + tm_fill("KnKod") + tm_borders()
当我将xlsx文件中的信息添加到shp文件时,麻烦就开始了:
map <- merge(map, kapital_kommun, by = "KnKod")
KnKod KnNamn medel_finans_kapital
1 0114 Upplands Väsby 125573
2 0115 Vallentuna 56361
3 0117 Österåker 93963
4 0120 Värmdö 67308
5 0123 Järfälla 32321
6 0125 Ekerö 102685
这对我来说看起来不错,但是现在当我运行前面的代码时却出现错误,并且未绘制任何地图/绘图。我已经尝试过“ KnKod”和“ medel_finans_kapital”:
tm_shape(map) + tm_fill("KnKod") + tm_borders()
> tm_shape(map) + tm_fill("KnKod") + tm_borders()
Error in st_as_sfc.SpatialPolygons(sp::geometry(x), ...) :
package rgeos required for finding out which hole belongs to which exterior ring
In addition: Warning message:
In sp::proj4string(obj) : CRS object has comment, which is lost in output
似乎就像以某种方式添加medel_finans_kapital列的“ breaks”代码一样。有什么想法吗?
答案 0 :(得分:0)
解决方案:
代替:
地图<-merge(map,kapital_kommun,by =“ KnKod”)
我使用了:
map $ income <-kapital_kommun $ medel_finans_kapital
现在我可以绘制地图了。为什么有所作为,我不知道。结果看起来一样-两列看起来都一样,并标记为“ num”。
答案 1 :(得分:0)
请提供一个更可重现的问题示例。仅通过阅读代码就很难发现错误所在。
我认为问题是当您使用 merge()函数时,此后您还有 sp 对象吗?
Alsop,请注意,现在不建议使用 sp 定义,而推荐使用 sf 。此外,通过 sf ,您可以使用标准的 tidyverse 功能。代替合并,您可以使用 left_join 之类的东西。
我建议您看一看来自workop的笔记:https://orlando-sabogal.github.io/SpatialAnalysis-MontevideoWorkshop2019/
它从去年开始就没有更新,但是应该仍然可以使用。