【发布时间】:2019-06-25 05:00:17
【问题描述】:
tm 点似乎对标识给定观察所需形状的列存在问题
来自形状枚举:
0 = 开放正方形
1 = 打开圆圈
22 = 实心正方形
21 = 开圈
当我将 shape 参数设置为“shapeCol”时 其中 shapeCol 是 0 / 1 列(开放形状),它返回填充但其他正确的形状
当我手动将形状设置为 0 它返回正确的开放形状,但我需要这个形状因观察而异
创建随机空间数据的数据框
library(sf)
library(tmap)
library(dplyr)
newDf <- data.frame(location=letters[1:30],
lat=32+runif(30,0.01,0.03),
lon=-97+runif(30,.01,.03)) %>%
mutate(rowID=1:n(),
reservoir=case_when(rowID<=15 ~ 'Codell',
TRUE ~'Niobrara'))
newSf <- st_as_sf(newDf,coords=c('lon','lat'),crs=4326)
分配形状值/数字索引
shapes <- c('Niobrara'='circle',
'Codell'='square')
shapeVals <- c('circle'=21,'square'=22,'triangleup'=24,'diamond'=23,'triangleDown'=25)
borderVals <- c('circle'=0,'square'=1,'triangleup'=2,'diamond'=5,'triangleDown'=6)
newSf.fin <- newSf %>% mutate(shapeType = shapes[reservoir],
shapeCol = as.factor(shapeVals[shapeType]),
borderCol = as.factor(borderVals[shapeType]))
newSf.fin %>% select(borderCol) # 0 and 1 / Open Shapes
#returns filled shapes despite shape column only referencing open values
tm_shape(newSf.fin) + tm_dots(shape='borderCol',size=2)
#returns open shapes by manually setting shape value
tm_shape(newSf.fin) + tm_dots(shape=0,size=2)
我知道这可以通过映射/循环来缓解,但色标会更成问题和困难。有没有办法根据列值实现正确的开放形状?
【问题讨论】: