(R 中的 tmap 包)过滤 tm_text 内的值
(tmap package in R) Filtering values within tm_text
我想根据数据过滤器显示 tm_text 选项。举个例子:
tm_shape(World) +
tm_polygons("HPI") +
tm_text("name", size = "AREA")
这会显示每个功能的文本。但是假设我只想显示 HPI 值大于 30 的国家/地区的文本。我希望 tm_text 中可以有一个参数,例如 tm_text(..., filter = "HPI" > 30), 但我看不到任何类似的东西。我能想到的唯一方法是创建另一层:
tm_shape(World) +
tm_polygons("HPI") +
tm_shape(World %>% filter(HPI > 30)) +
tm_text("name", size = "AREA")
语法很好,直观,除了颜色之外,文本是我想要的;注意现在文本的颜色是全黑的。在第一个示例中,它在较暗的多边形上显示白色字体。我唯一的理由是第二层不是多边形颜色的 "aware",因为它们在另一层中。
我认为可能可行的另一种方法是根据过滤器在数据中包含一个变量。
World <- World %>% mutate(FLAG = if_else(HPI > 30, 1, 0)
tm_shape(World) +
tm_polygons("HPI") +
tm_text("name", size = "FLAG")
位置和颜色就在这里,但忽略了我不想在我的数据中到处都是标志变量这一事实,现在大小不正确,因为我将它用作一种 hacky 过滤方式。也请忽略某些文本在白色时不可见的事实;显然我会更改背景颜色,这是一个示例,在我的地图中,文本将在背景上可见)。
所以总而言之,我想问的是是否有一种方法可以实现第二张地图的文本大小 + 位置,但第一张地图的颜色(如果可能的话,无需编辑数据).
在我看来,最简单的解决方案是修改 name
变量创建另一个变量,如果 HPI >= 30
则等于名称,否则为空字符向量。例如:
# packages
library(tmap)
library(dplyr)
# data
data("World")
# modify name column according to HPI
World <- World %>%
mutate(new_name = ifelse(HPI >= 30, as.character(name), ""))
# plot
tm_shape(World) +
tm_polygons("HPI") +
tm_text("new_name", size = "AREA")
由 reprex package (v0.3.0)
于 2020-05-14 创建
我想根据数据过滤器显示 tm_text 选项。举个例子:
tm_shape(World) +
tm_polygons("HPI") +
tm_text("name", size = "AREA")
这会显示每个功能的文本。但是假设我只想显示 HPI 值大于 30 的国家/地区的文本。我希望 tm_text 中可以有一个参数,例如 tm_text(..., filter = "HPI" > 30), 但我看不到任何类似的东西。我能想到的唯一方法是创建另一层:
tm_shape(World) +
tm_polygons("HPI") +
tm_shape(World %>% filter(HPI > 30)) +
tm_text("name", size = "AREA")
语法很好,直观,除了颜色之外,文本是我想要的;注意现在文本的颜色是全黑的。在第一个示例中,它在较暗的多边形上显示白色字体。我唯一的理由是第二层不是多边形颜色的 "aware",因为它们在另一层中。
我认为可能可行的另一种方法是根据过滤器在数据中包含一个变量。
World <- World %>% mutate(FLAG = if_else(HPI > 30, 1, 0)
tm_shape(World) +
tm_polygons("HPI") +
tm_text("name", size = "FLAG")
位置和颜色就在这里,但忽略了我不想在我的数据中到处都是标志变量这一事实,现在大小不正确,因为我将它用作一种 hacky 过滤方式。也请忽略某些文本在白色时不可见的事实;显然我会更改背景颜色,这是一个示例,在我的地图中,文本将在背景上可见)。
所以总而言之,我想问的是是否有一种方法可以实现第二张地图的文本大小 + 位置,但第一张地图的颜色(如果可能的话,无需编辑数据).
在我看来,最简单的解决方案是修改 name
变量创建另一个变量,如果 HPI >= 30
则等于名称,否则为空字符向量。例如:
# packages
library(tmap)
library(dplyr)
# data
data("World")
# modify name column according to HPI
World <- World %>%
mutate(new_name = ifelse(HPI >= 30, as.character(name), ""))
# plot
tm_shape(World) +
tm_polygons("HPI") +
tm_text("new_name", size = "AREA")
由 reprex package (v0.3.0)
于 2020-05-14 创建