4

我有一个 SpatialPolygonsDataFrame,其中的列包含十六进制颜色值。我想用包 tmap 画出这样的地图:

tm_shape(full.shp) + tm_fill(col="konf1900")

但随后它被视为分类变量,导致: 截图 2016-11-01 10 15 53

我不知道如何告诉 tmap 它应该直接在地图上绘制颜色值......

有人可以帮忙吗?

编辑: 见下面的答案 - 问题是数据框列没有编码as.character。我认为这可能会在某个时候对某人有所帮助...

4

2 回答 2

4

显然,问题出在列的类型上:

full.shp$konf1900char <- as.character(full.shp$konf1900)
tm_shape(full.shp) + tm_fill(col="konf1900char")

它需要转换为带有as.character. 此外,重要的是没有 NA 值,它们可以转换为白色(#ffffff 十六进制格式):

full.shp$konf1900char[is.na(full.shp$konf1900char)] <- "#ffffff"

通过这些转换,它可以很好地与 tmap 配合使用,并且 tm_fill 从变量中获取颜色值。

编辑:
这是生成的图像(与上面问题中的屏幕截图相比): 在此处输入图像描述

于 2016-11-01T12:01:18.097 回答
2
library(tmap)

#Load in some example data
data(Europe)

#Create a dataframe with all a column containing country ID and another with an assigned color:
region_col <- data.frame(
  iso_a3 = Europe$iso_a3,
  mycolors = c(rep("#94b8b8",68)), #Assign the same color to all regions initilally
  stringsAsFactors = FALSE
)

#Highlight some selected regions by looking up the 3 letter iso_a3 code and changing the 
#associated hexidecimal color reference:
region_col$mycolors[region_col$iso_a3 == "GBR"] <- "#00ff00"
region_col$mycolors[region_col$iso_a3 == "FRA"] <- "#ff0000"
region_col$mycolors[region_col$iso_a3 == "DEU"] <- "#ffff00"
region_col$mycolors[region_col$iso_a3 == "ESP"] <- "#0000ff"

#Import color selection from region_col dataframe into Europe SpatialPolygonDataFrame
Europe$color <- region_col$mycolors

#Plot resultant map:
qtm(Europe, fill = "color")

在此处输入图像描述

于 2016-11-01T12:43:57.947 回答