我正在尝试使用plotly
在美国地图上绘制一些数据,以便当鼠标悬停在该位置上时显示一些信息。
信息传递到text
,然后通过hoverinfo = "text"
传递到绘图。
有效的方法
什么不起作用
我尝试在Windows中使用Google Chrome,Internet Explorer和Firefox,在MacOS中使用Safari和Google Chrome浏览器。
在Windows环境中制作的图,在Windows环境中查看(谷歌浏览器):
在MacOS环境中制作的图,在Windows环境中查看(谷歌浏览器):
注意:上图中的某些数据点是不同的,因为我修改了几列,但基础数据格式和代码是相同的。
我无法共享数据,因此下面是一些使用mtcars
的示例代码,它导致与上述相同的行为。
数据
> dput(dt)
structure(list(mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3,
24.4, 22.8, 19.2, 17.8, 16.4, 17.3, 15.2, 10.4, 10.4, 14.7, 32.4,
30.4, 33.9, 21.5, 15.5, 15.2, 13.3, 19.2, 27.3, 26, 30.4, 15.8,
19.7, 15, 21.4), cyl = c(6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8,
8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, 4, 4, 4, 8, 6, 8, 4),
disp = c(160, 160, 108, 258, 360, 225, 360, 146.7, 140.8,
167.6, 167.6, 275.8, 275.8, 275.8, 472, 460, 440, 78.7, 75.7,
71.1, 120.1, 318, 304, 350, 400, 79, 120.3, 95.1, 351, 145,
301, 121), hp = c(110, 110, 93, 110, 175, 105, 245, 62, 95,
123, 123, 180, 180, 180, 205, 215, 230, 66, 52, 65, 97, 150,
150, 245, 175, 66, 91, 113, 264, 175, 335, 109), drat = c(3.9,
3.9, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92,
3.07, 3.07, 3.07, 2.93, 3, 3.23, 4.08, 4.93, 4.22, 3.7, 2.76,
3.15, 3.73, 3.08, 4.08, 4.43, 3.77, 4.22, 3.62, 3.54, 4.11
), wt = c(2.62, 2.875, 2.32, 3.215, 3.44, 3.46, 3.57, 3.19,
3.15, 3.44, 3.44, 4.07, 3.73, 3.78, 5.25, 5.424, 5.345, 2.2,
1.615, 1.835, 2.465, 3.52, 3.435, 3.84, 3.845, 1.935, 2.14,
1.513, 3.17, 2.77, 3.57, 2.78), qsec = c(16.46, 17.02, 18.61,
19.44, 17.02, 20.22, 15.84, 20, 22.9, 18.3, 18.9, 17.4, 17.6,
18, 17.98, 17.82, 17.42, 19.47, 18.52, 19.9, 20.01, 16.87,
17.3, 15.41, 17.05, 18.9, 16.7, 16.9, 14.5, 15.5, 14.6, 18.6
), vs = c(0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1), am = c(1,
1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1), gear = c(4, 4, 4, 3,
3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3,
3, 3, 4, 5, 5, 5, 5, 5, 4), carb = c(4, 4, 1, 1, 2, 1, 4,
2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1,
2, 2, 4, 6, 8, 2), lat = c(37.651974, 32.553769, 36.069144,
40.992647, 41.714795, 32.553769, 33.85455, 33.56375, 39.764189,
42.89606, 41.04349, 35.96064, 21.40877, 41.18389, 28.545179,
45.507856, 42.504844, 46.25024, 37.388556, 26.597956, 21.399548,
40.992647, 40.992647, 33.57786, 41.720684, 35.169255, 32.553769,
39.743291, 32.29876, 36.862603, 61.220018, 43.088821), lon = c(-97.258997,
-90.138906, -79.765156, -74.312443, -90.026414, -90.138906,
-84.21714, -81.80789, -84.076154, -78.886424, -81.524017,
-83.92074, -157.7899, -96.03113, -81.373291, -122.690794,
-71.201539, -94.25055, -122.01774, -81.846331, -158.015151,
-74.312443, -74.312443, -101.85517, -83.569359, -89.990415,
-90.138906, -105.069027, -90.18481, -119.734947, -149.855702,
-82.490486)), .Names = c("mpg", "cyl", "disp", "hp", "drat",
"wt", "qsec", "vs", "am", "gear", "carb", "lat", "lon"), row.names = c(NA,
-32L), class = c("data.table", "data.frame"))
代码
libary(plotly)
library(data.table)
plt_layout<- list(
scope = 'usa',
projection = list(type = 'albers usa'),
showland = TRUE,
landcolor = toRGB("gray95"),
subunitcolor = toRGB("gray85"),
countrycolor = toRGB("gray85"),
countrywidth = 0.5,
subunitwidth = 0.5
)
pl <- plot_geo(data = dt) %>%
add_markers(
x = ~lon, y = ~lat,
text = ~paste(mpg, cyl, wt, carb,
sep = '<br />'),
symbol = I("circle"), size = ~disp, opacity = 0.5, hoverinfo = "text"
) %>%
layout(
title = 'mtcars on map', geo = plt_layout
)
htmlwidgets::saveWidget(widget = as_widget(pl), file = 'samplemap.html')
输出