我有一个 SpatialPolygonsDataFrame,其中的列包含十六进制颜色值。我想用包 tmap 画出这样的地图:
tm_shape(full.shp) + tm_fill(col="konf1900")
但随后它被视为分类变量,导致:
我不知道如何告诉 tmap 它应该直接在地图上绘制颜色值......
有人可以帮忙吗?
编辑:
见下面的答案 - 问题是数据框列没有编码as.character
。我认为这可能会在某个时候对某人有所帮助...
显然,问题出在列的类型上:
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 从变量中获取颜色值。
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")