在tmap中具有颜色值的列

时间:2016-11-01 09:19:24

标签: r colors tmap

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

绘制这样的地图
tm_shape(full.shp) + tm_fill(col="konf1900")

但是它被视为分类变量,导致: screenshot 2016-11-01 10 15 53

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

有人可以为此提供帮助吗?

编辑: 请参阅下面的答案 - 问题是数据框列没有编码as.character。我想这可能会帮助某个人......

2 个答案:

答案 0 :(得分:3)

显然,问题是列的类型:

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可以从变量中获取颜色值。

编辑:
这是生成的图像(与上面问题中的屏幕截图相比): enter image description here

答案 1 :(得分: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")

enter image description here