Я использую plotly
для отображения данных на карте.График инициализируется как mapbox
график:
plt <- plot_mapbox(data = usa) %>%
layout(
plot_bgcolor = '#191A1A', paper_bgcolor = 'white',
mapbox = list(style = 'dark',
zoom = 3.75,
center = list(lat = 38.5, lon = -98.35)),
margin = list(l = 0, r = 0,
b = 0, t = 0,
pad = 0),
showlegend = TRUE)
, где usa
- это мой набор данных, содержащий координаты и некоторую другую информацию.Я использую add_fun
для добавления маркеров на график:
layerFunc <- function(plotname, person){
plotname %>%
filter(statename %in% areas[people == person, unique(state)]) %>%
add_markers(
x = ~LONGITUDE, y = ~LATITUDE, name = tools::toTitleCase(person), size = ~mw,
visible = 'legendonly',
showlegend = TRUE)
}
u <- plt
sapply(areas$people, function(z){
u <<- u %>% add_fun(layerFunc, z)
})
Задача 1 Вышеприведенное работает отлично, я вижу маркеры на карте, а размер является функциейстолбец (mw
).Однако, когда я пытаюсь добавить:
text = ~paste(areacodes, statename, sep = '<br />', hoverinfo = 'text'
, на выходе нет никакой информации о наведении курсора.
Задача 2 Я хочу показать дополнительные данные на карте.Я использую следующий код:
u <- u %>%
add_markers(
data = tsm,
x = ~lng, y = ~lat, name = 'TSM Locations',
marker = list(symbol = 'triangle-up'),
# text = ~Name, hoverinfo = 'text',
hoverinfo = 'Name', size = 8, opacity = 0.8, visible = 'legendonly'
)
Это не работает.triangle-up
отображается как часть имени трассы, и я ничего не вижу на карте.Если я не определю symbol
, то по умолчанию будет circle
без какой-либо информации о наведении.Я попытался определить text
, а затем hoverinfo = 'text'
, который также не работает.
У меня есть несколько наборов данных, которые я хочу добавить на карту, используя приведенный выше код (проблема 2), но все они отображаются в виде кругов, что затрудняет чтение карты.Отсутствие hoverinfo
расстраивает, но я могу с этим смириться.
Не предоставляю ли я правильную информацию plot_mapbox
или add_markers
?Документация для R plotly
не очень помогает в том, как аргументы должны быть предоставлены.
ДАННЫЕ Приведенные ниже данные являются небольшим подмножеством в моей реальной проблеме.usa
имеет 7000 строк, tsm
как 20 и areas
имеет 190
.
# tsm
structure(list(lat = c(29.782069, 45.2168, 33.223887, 32.75041,
33.428605, 30.143517, 33.361106, 41.664759), lng = c(-95.567965,
-75.68265, -117.310383, -89.75036, -84.664446, -95.39606, -111.816541,
-88.20742), Name = c("Brock Hamlin", "David Flake", "Jeremy Wirtjes",
"Jim Benson", "Matthew Watson", "Hans Ambrosia", "Erik Fulk",
"Brian Hanneman")), .Names = c("lat", "lng", "Name"), row.names = c(NA,
-8L), class = c("data.table", "data.frame"))
# areas
dput(areas[, .(people = subregion, state)])
structure(list(people = c("W2", "E3", "E3", "E3", "E3", "E3",
"E3", "E3", "E3", "E3", "N", "E2", "E2", "E2", "E2", "E2", "E2",
"E2", "E2", "C5", "C5", "C5", "C3", "E5", "E4", "E4", "MW3",
"MW3", "MW3", "MW3", "W2", "C2", "C1", "MW1", "MW1", "MW1", "MW1",
"MW1", "MW1", "MW1", "MW1", "MW1", "S1", "S1", "S1", "S1", "S1",
"S1", "W2", "W2", "W2", "W2", "W3", "W3", "W3", "W3", "W3", "W3",
"W3", "C4", "E1", "D"), state = c("California", "Connecticut",
"Delaware", "Maine", "Massachusetts", "New Hampshire", "New Jersey",
"New York", "Rhode Island", "Vermont", "Alaska", "Alabama", "Georgia",
"Mississippi", "North Carolina", "South Carolina", "Tennessee",
"Virginia", "West Virginia", "New Brunswick", "New Foundland",
"Nova Scotia", "Saskatchewan", "Pennsylvania", "Maryland", "Washington DC",
"Indiana", "Kentucky", "Michigan", "Ohio", "Nevada", "Alberta",
"Alberta", "Illinois", "Minnesota", "Wisconsin", "Iowa", "Kansas",
"Missouri", "Nebraska", "North Dakota", "South Dakota", "Texas",
"Arkansas", "Oklahoma", "Louisiana", "Texas", "Texas", "California",
"Oregon", "Washington", "Nevada", "Arizona", "Colorado", "New Mexico",
"Utah", "Idaho", "Montana", "Wyoming", "Ontario", "Florida",
"Puerto Rico")), .Names = c("people", "state"), row.names = c(NA,
-62L), class = c("data.table", "data.frame"))
# usa
structure(list(LATITUDE = c(39.866944, 42.542949, 33.794848,
45.600297, 34.839982, 30.37644, 40.439304, 70.34446, 38.191704,
39.810329, 47.785648, 39.5293, 43.67946, 32.607693, 27.76736,
40.7825, 40.648611, 41.809461, 42.383176, 28.049116), LONGITUDE = c(-77.685833,
-70.928314, -118.235332, -93.206995, -79.741256, -83.18064, -74.344391,
-150.927127, -82.605235, -75.428115, -116.921093, -87.42355,
-85.48363, -85.097016, -91.51609, -73.8964, -74.020833, -72.254281,
-87.814198, -81.922944), areacodes = c("717", "351,978", "323",
"612,763", "910", "386", "848,732", "907", "606", "610", "208",
"812", "231", "334", "not found", "718", "718,917,347,929", "not found",
"847,224", "863"), statename = c("Pennsylvania", "Massachusetts",
"California", "Minnesota", "North Carolina", "Florida", "New Jersey",
"Alaska", "Kentucky", "Pennsylvania", "Idaho", "Indiana", "Michigan",
"Alabama", "NA", "New York", "New York", "Connecticut", "Illinois",
"Florida")), .Names = c("LATITUDE", "LONGITUDE", "areacodes",
"statename"), row.names = c(NA, -20L), class = c("data.table",
"data.frame")