Цвет точек и размер символов на основе разных переменных в просмотре карты
Я пытаюсь использовать тему разнонаправленного масштаба в просмотре карты, чтобы помочь визуализировать прибыль или убытки с помощью:
- размеры окружностей в точечном символе по шкале абсолютных значений (чтобы выделить как потери, так и выгоды)
- заливка расходящейся цветовой шкалы для кругов (скажем, темно-синий> синий> белый> красный> темно-красный для большинства негативов> негатив> нуля> позитива> наибольшего)
- указатель мыши при наведении курсора на оригинальное значение сохраняется
есть идеи?
library(tidyverse)
library(mapview)
library(sf)
lat <- rep(34,16)
lon <- seq(-128, -126, length = 16)
value <- c(-1000, -800, -600, -400, -200, -100, -50,
-25, 25, 50, 100, 200, 400, 600, 800, 1000)
#make data.frame
df <- data.frame(lat, lon, value)
#make spatial object for mapview
df <- st_as_sf(df, coords = c("lon", "lat"), crs = 4326) %>%
mutate(value_abs = abs(value)) #value_abs intended for `cex` argument
pal <- mapviewPalette("mapviewSpectralColors") #from mapview doc. example
m <- mapview(df["value"], #sets hover over value as this column
cex = "value", #sets circle diameter scaling on this column
legend = TRUE,
col.regions = pal(100), #closest I found to a red-blue divergent scale
layer.name = "value")
m
Другими словами, я надеюсь, что рисунок точек ниже будет симметричным с левой стороны как зеркальное отображение правого размера, но с синими кругами слева, красным справа и все еще позволяющим пользователю видеть фактические (не абсолютные) значения (например, -1000
) при наведении мыши.
попытки: переключение cex = "value"
с участием cex = "value_abs"
доходность warning: In min(x) : no non-missing arguments to min; returning Inf
без каких-либо нарисованных точек, или с cex = df$value_abs
(без кавычек), что делает неокрашенные, огромные очки. Я не планирую нуждаться в двух легендах - просто одна для размера круга или заполнения, показывающая минимальное и максимальное значение, как сейчас, была бы отличной.
1 ответ
Вы очень близки Вы должны явно обратиться к df$value_abs
, Смотри ниже:
library(tidyverse)
library(mapview)
library(sf)
df <- data.frame(lat=rep(34,16),
lon=seq(-128, -126, length = 16),
value=c(-1000, -800, -600, -400, -200, -100, -50,
-25, 25, 50, 100, 200, 400, 600, 800, 1000))
df <- st_as_sf(df, coords = c("lon", "lat"), crs = 4326) %>%
mutate(value_abs = abs(value))
pal <- mapviewPalette("mapviewSpectralColors")
mapview(df["value"],
cex = df$value_abs/100,
legend = TRUE,
col.regions = pal(100),
layer.name = "value")
Создано в 2019-06-24 пакетом представлением (v0.3.0)