首页 > 解决方案 > 在 Mapview 中绘制点数据 - 点符号大小的非线性比例?

问题描述

图书馆有没有办法mapview使用非线性比例绘制点符号的大小?例如,使用几何间隔、自定义间隔向量,还是基于 Jenks 的自然休息方法之类的间隔?(mapview'线性设置点大小'cex':https ://r-spatial.github.io/mapview/articles/articles/mapview_02-advanced.html )

我的用例是绘制河流流量数据的许多点,但由于海潮在海岸的极高和极低值占主导地位,以至于基本上所有非海岸位置似乎都具有符号大小(代表河流流量) 几乎没有明显的不同,而我希望用户可以轻松地看到像小溪与河流这样的差异(例如,在这里,三个组的值在 1000 年代,另一个在 5000 年代,另一个在 9000 年代)。

library(mapview)
library(sf)

lat <- seq(1, 20, 1)
lon <- lat
value_to_visualize <- c(461000, 1500, 1400, 1450, 1350, 1100, 1400, 2000, 9040, 9060, 
                    9080, 9990, 9995, 5750, 5500, 5400, 5300, 5100, 5050, -60000)

df <- data.frame(lat,lon, value_to_visualize)
df <- st_as_sf(df, coords = c("lon", "lat"), crs = 4326) 

m <- mapview(df["value_to_visualize"], 
         cex = "value_to_visualize",
         legend = TRUE,
         layer.name = "cfs")  
m

在此处输入图像描述

标签: rplotleafletr-mapview

解决方案


library(mapview)
library(sf)

lat <- seq(1, 20, 1)
lon <- lat
value_to_visualize <- c(461000, 1500, 1400, 1450, 1350, 1100, 1400, 2000, 9040, 9060, 
                        9080, 9990, 9995, 5750, 5500, 5400, 5300, 5100, 5050, -60000)


cluster_to_visualize <- dplyr::case_when(value_to_visualize<1000 ~ 1,
                                         value_to_visualize<5000 ~ 3,
                                         value_to_visualize<9000 ~ 5,
                                         value_to_visualize>9000 ~ 7)

df <- data.frame(lat,lon, cluster_to_visualize, value_to_visualize)
df <- st_as_sf(df, coords = c("lon", "lat"), crs = 4326) 

m <- mapview(df["value_to_visualize"], 
             cex = df$cluster_to_visualize,
             legend = TRUE,
             layer.name = "cfs") 

reprex 包(v0.3.0)于 2019 年 6 月 5 日创建


推荐阅读