使用 tmap 在 R 中自定义点映射
Customise dot maps in R using tmap
我有一个要映射的点数据集。我是 tmap
的新手,一直在玩弄它,但一直无法获得我想要的输出。我正在做以下事情(如果可能的话):
- 只显示指定
area
的分数(例如A002)
- 根据
value
为点着色并指定这些颜色是什么(例如 0=绿色,1= 蓝色和 2 = 红色)
- 在地图中显示带有自定义标题的图例(例如图例编号)
- 允许在图例中放置自定义文本(例如 0 [一些文本];1 [一些文本];2 [一些文本]
- 当您将鼠标悬停在某个点上时,会显示
label
中的条目
- 当您单击一个点时,会显示所有属性(例如代码、面积、值和标签的值)
这是我一直在使用的代码:
require("data.table")
require("sf")
require("tmap")
dt1 <- data.table(
code=c("A00111", "A00112","A00113","A00211","A00212","A00213","A00214","A00311","A00312"),
area=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
x=c(325147,323095,596020,257409,241206,248371,261076,595218,596678),
y=c(286151,284740,335814,079727,084266,078283,062045,333889,337836),
value=c(0,1,2,0,1,1,2,2,2),
label=c("A00 111", "A00 112","A00 113","A00 211","A00 212","A00 213","A00 214","A00 311","A00 312"))
sf1 <- st_as_sf(dt1, coords = c("x","y"), crs=27700, na.fail=FALSE)
tmap_mode("view")
map <- tm_shape(sf1) + tm_dots(group = "value", breaks = c(0,1,2,Inf), palette = c("aquamarine2", "cornflowerblue", "brown1"))
map
我只需对您的代码稍作改动就可以获得您想要的大部分分数。
主要变化是:
将 group
重构为 col
(我想这是你最大的绊脚石)
在labels
中添加三个图例标签的向量
在title
中添加图例标题
在 id
中添加弹出窗口标题(弹出窗口顶部的粗体大项)
在popup.vars
中添加弹出窗口"also-rans"(里面的小灰色项目);请注意我是如何重命名它们以包含冒号的(否则你最终会得到你的字段名称)
require("data.table")
require("sf")
require("tmap")
dt1 <- data.table(
code=c("A00111", "A00112","A00113","A00211","A00212","A00213","A00214","A00311","A00312"),
area=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
x=c(325147,323095,596020,257409,241206,248371,261076,595218,596678),
y=c(286151,284740,335814,079727,084266,078283,062045,333889,337836),
value=c(0,1,2,0,1,1,2,2,2),
label=c("A00 111", "A00 112","A00 113","A00 211","A00 212","A00 213","A00 214","A00 311","A00 312"))
sf1 <- st_as_sf(dt1, coords = c("x","y"), crs=27700, na.fail=FALSE)
tmap_mode("view")
map <- tm_shape(sf1) + tm_dots(col = "value",
breaks = c(0,1,2,Inf),
labels = c("some text A", "some text B", "some text C"),
id = "label", # bold in popup
popup.vars = c("area:" = "area", "code:" = "code"), # light in popup
palette = c("aquamarine2", "cornflowerblue", "brown1"),
title = "Lo & behold: a legend!")
map
弹出窗口不容易截屏,但似乎有效:)
我有一个要映射的点数据集。我是 tmap
的新手,一直在玩弄它,但一直无法获得我想要的输出。我正在做以下事情(如果可能的话):
- 只显示指定
area
的分数(例如A002) - 根据
value
为点着色并指定这些颜色是什么(例如 0=绿色,1= 蓝色和 2 = 红色) - 在地图中显示带有自定义标题的图例(例如图例编号)
- 允许在图例中放置自定义文本(例如 0 [一些文本];1 [一些文本];2 [一些文本]
- 当您将鼠标悬停在某个点上时,会显示
label
中的条目 - 当您单击一个点时,会显示所有属性(例如代码、面积、值和标签的值)
这是我一直在使用的代码:
require("data.table")
require("sf")
require("tmap")
dt1 <- data.table(
code=c("A00111", "A00112","A00113","A00211","A00212","A00213","A00214","A00311","A00312"),
area=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
x=c(325147,323095,596020,257409,241206,248371,261076,595218,596678),
y=c(286151,284740,335814,079727,084266,078283,062045,333889,337836),
value=c(0,1,2,0,1,1,2,2,2),
label=c("A00 111", "A00 112","A00 113","A00 211","A00 212","A00 213","A00 214","A00 311","A00 312"))
sf1 <- st_as_sf(dt1, coords = c("x","y"), crs=27700, na.fail=FALSE)
tmap_mode("view")
map <- tm_shape(sf1) + tm_dots(group = "value", breaks = c(0,1,2,Inf), palette = c("aquamarine2", "cornflowerblue", "brown1"))
map
我只需对您的代码稍作改动就可以获得您想要的大部分分数。
主要变化是:
将
group
重构为col
(我想这是你最大的绊脚石)在
labels
中添加三个图例标签的向量
在
title
中添加图例标题
在
id
中添加弹出窗口标题(弹出窗口顶部的粗体大项)
在
popup.vars
中添加弹出窗口"also-rans"(里面的小灰色项目);请注意我是如何重命名它们以包含冒号的(否则你最终会得到你的字段名称)
require("data.table")
require("sf")
require("tmap")
dt1 <- data.table(
code=c("A00111", "A00112","A00113","A00211","A00212","A00213","A00214","A00311","A00312"),
area=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
x=c(325147,323095,596020,257409,241206,248371,261076,595218,596678),
y=c(286151,284740,335814,079727,084266,078283,062045,333889,337836),
value=c(0,1,2,0,1,1,2,2,2),
label=c("A00 111", "A00 112","A00 113","A00 211","A00 212","A00 213","A00 214","A00 311","A00 312"))
sf1 <- st_as_sf(dt1, coords = c("x","y"), crs=27700, na.fail=FALSE)
tmap_mode("view")
map <- tm_shape(sf1) + tm_dots(col = "value",
breaks = c(0,1,2,Inf),
labels = c("some text A", "some text B", "some text C"),
id = "label", # bold in popup
popup.vars = c("area:" = "area", "code:" = "code"), # light in popup
palette = c("aquamarine2", "cornflowerblue", "brown1"),
title = "Lo & behold: a legend!")
map
弹出窗口不容易截屏,但似乎有效:)