R tmap,图例格式 - 在第一个图例键中显示单个值

时间:2018-03-08 13:33:04

标签: r legend tmap

我不确定如何或是否可以以下列方式调整关键传说。 考虑一下这个例子:

library(tmap)
data(Europe)

my_map <- 
  tm_shape(Europe) +
  tm_polygons("well_being", textNA="Non-European countries", title="Well-Being Index") +
  tm_text("iso_a3", size="AREA", root=5) +
  tm_layout(legend.position = c("RIGHT","TOP"),
            legend.frame = TRUE)

enter image description here

我尝试了legend.format = list(scientific = TRUE)之类的内容:

my_map2 <- my_map +
  tm_layout(legend.format = list(scientific = TRUE))

为传奇提供了这个:

enter image description here

然而,我希望的是:

enter image description here

在我的数据中,4是零,我被要求让它脱颖而出。

2 个答案:

答案 0 :(得分:2)

据我所知,单独使用tmap图例格式是不可能的 - 总会有小分隔符。可以使用text.separatorlegend.format调用“to”或者覆盖它的任何内容。

您需要的是数据处理中的一个额外步骤 - 您必须使用标签创建一个特殊变量,并根据此绘图。您可以完全控制级别,因此您可以将第一个作为独立的零。

为简单起见,我使用ifelse分为两个级别(加上非欧洲国家的NA),但你可以得到更多的花哨......

Europe <- Europe %>%
  st_as_sf() %>%  # from sf package - makes Europe behave as a data.frame
  mutate(well_being_adj = ifelse(well_being < 5, "0", "more than five"))

my_map <- 
  tm_shape(Europe) +
  tm_polygons("well_being_adj", textNA="Non-European countries", title="Well-Being Index") +
  tm_text("iso_a3", size="AREA", root=5) +
  tm_layout(legend.position = c("RIGHT","TOP"),
            legend.frame = TRUE)
print(my_map)

enter image description here

答案 1 :(得分:1)

尽管已解决,但另一个更实用的选择是修改 tm_polygons labels

tm_polygons(labels = c ("0", "more than five")

这种方法也可用于栅格文件