Моя цель состоит в том, чтобы связать подсветку между сюжетной фигурой на одной панели и картой на второй панели. Для моих целей я хочу выбрать (выделить) данные на одной панели и выделить выбранные данные красным цветом на обеих панелях, а не затемнить невыбранные данные. Это должно работать независимо от того, какая панель используется для выбора данных. Ниже у меня есть два подхода, каждый из которых выделяет данные между двумя панелями, но имеет цвет выделения, а затемнение имеет проблемы с функциональностью.
Подход A: В этом подходе я сопоставляю листовку, чтобы избежать мапбокса. Я также использую mode ='markers+lines'
, так как в моих реальных данных точки данных расположены очень близко друг к другу по оси x, и соединение данных линией визуально полезно, хотя это создает проблему с функциональностью, которую я описываю ниже в коде.
library(plotly)
library(dplyr)
library(leaflet)
library(htmlwidgets)
library(crosstalk)
set.seed(1)
dat <- tibble(name = letters[1:21]
, latitude = seq(38.6,38.8,0.01)
, longitude = seq(-86.4,-86.8,-0.02)
, var.x = 1:21
, var.y = runif(21))
dat.a <- highlight_key(dat)
p <- plot_ly(dat.a) %>%
add_trace(x = ~var.x, y = ~var.y
, text = ~name
, alpha = 0.8
, mode = 'markers+lines', type = 'scatter'
, color = I("#1f77b4")
, showlegend = FALSE) %>%
highlight(on = "plotly_selected"
, off = "plotly_deselect"
, opacityDim = 1
, color='red')
map <- leaflet(dat.a) %>%
addTiles() %>%
# addProviderTiles(providers$CartoDB.Positron) %>%
addCircles(lat = ~latitude
, lng = ~longitude
, stroke = TRUE
, color = I("#1f77b4")
, weight = 3
, opacity = .8) %>%
highlight(on="plotly_selected")
bscols(widths = c(5, 7)
, p, map)
Подход A комментарии: На приведенном ниже снимке экрана я выбрал 4 точки данных на рисунке (левая панель), где y<=0,2. Проблема 1: правильные точки на карте (правая панель) выбраны, но в выделенных точках (на карте) остаются синими, а невыбранные точки тусклыми. Проблема 2: после выбора рисунок (левая панель) добавляет красную линию между точками, когда var.x= 5 и var.x=10. (Приемлемо решение проблемы 2, заключающееся только в выделении символов, а не линий на рисунке (левая панель)).
Подход B: В этом подходе я сопоставляю с графиком, что хорошо из-за более продвинутых функций выбора на карте
library(plotly)
library(dplyr)
library(htmlwidgets)
library(crosstalk)
set.seed(1)
dat <- tibble(name = letters[1:21]
, latitude = seq(38.6,38.8,0.01)
, longitude = seq(-86.4,-86.8,-0.02)
, var.x = 1:21
, var.y = runif(21))
dat.a <- highlight_key(dat)
p <- plot_ly(dat.a) %>%
add_trace(x = ~var.x, y = ~var.y
, type = "scatter"
, text = ~name
, alpha = 0.8
, mode = 'lines+markers'
, color = I("#1f77b4")
, showlegend = FALSE) %>%
highlight(on = "plotly_selected"
, off = "plotly_deselect"
, opacityDim = 1
, color = 'red')
map <- plot_ly(dat.a) %>%
add_trace(lon = ~longitude, lat = ~latitude
, type = "scattermapbox"
, text = ~name
, alpha = 0.8
, mode = "marker"
, color = I("#1f77b4")
, hoverinfo = ~name) %>%
# Plot the data again but using the original data
add_trace(lon = ~longitude, lat = ~latitude
, data = dat
, type = "scattermapbox"
, text = ~name
, alpha = 0.8
, mode = "markers"
, color = I("#1f77b4")
, showlegend = FALSE) %>%
layout(
mapbox = list(
style = 'open-street-map',
zoom = 8.5,
center = list(lon = mean(dat$longitude),
lat = mean(dat$latitude)))) %>%
highlight(on = "plotly_selected"
, off = "plotly_deselect"
, color = 'red')
bscols(p, map, widths = c(5, 7))
Комментарии к подходу B: При выполнении кода выбор данных на рисунке (левая панель) правильно выделяет данные на карте (правая панель) — похоже, это работает постоянно. Проблема 1: при первом запуске кода выбор данных на карте (правая панель) правильно выделяет данные на рисунке (левая панель) в первый раз. Последующие выборки из результата карты не окрашиваются в желаемый красный цвет, а также затемняют невыбранные точки. Проблема 2 (такая же, как и проблема 2 подхода A): после выбора на рисунке (левая панель) добавляется красная линия между точками, как var.x= 5 и var.x=10. (Приемлемо решение проблемы 2, заключающееся только в выделении символов, а не линий на рисунке (левая панель)).
Мои вопросы («проблемы»), с которыми мне нужна помощь, как указано в комментариях к подходу A и B:
Для подхода A: Я ищу изменения в моем коде, которые будут 1) выделять точки красным цветом на левой панели без добавления красной соединительной линии и 2) выделять точки красным цветом на правой панели, а не затемнять другие точки.
Для подхода B: я ищу изменения, которые позволят последовательно выделять точки на карте красным цветом (похоже, это работает нормально в первый раз, но не повторно, и 2) не соединять точки на графике красной линией, т.е. просто выделите точки).
Можете ли вы уточнить, есть ли здесь вопрос, на который нужно ответить?
@phalteman … обновлено, чтобы указать вопросы в конце исходного сообщения