交互式地图
plotly
包允许多种交互式图,包括地图。有两种方法可以在 plotly
中创建地图。要么自己提供地图数据(通过 plot_ly()
或 ggplotly()
),请使用 plotly 的原生映射功能(通过 plot_geo()
或 plot_mapbox()
),甚至两者的组合。自己提供地图的一个例子是:
library(plotly)
map_data("county") %>%
group_by(group) %>%
plot_ly(x = ~long, y = ~lat) %>%
add_polygons() %>%
layout(
xaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE),
yaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE)
)
对于两种方法的组合,在上面的例子中交换 plot_ly()
用于 plot_geo()
或 plot_mapbox()
。有关更多示例,请参阅情节书 。
下一个示例是一种严格原生方法,它利用 layout.geo 属性来设置地图的美学和缩放级别。它还使用 maps
的数据库 world.cities
来过滤巴西城市,并将它们绘制在原生地图之上。
主要变量:poph
是城市及其人口的文本(鼠标悬停时显示); q
是人口分位数的有序因子。ge
具有地图布局的信息。有关更多信息,请参阅包文档 。
library(maps)
dfb <- world.cities[world.cities$country.etc=="Brazil",]
library(plotly)
dfb$poph <- paste(dfb$name, "Pop", round(dfb$pop/1e6,2), " millions")
dfb$q <- with(dfb, cut(pop, quantile(pop), include.lowest = T))
levels(dfb$q) <- paste(c("1st", "2nd", "3rd", "4th"), "Quantile")
dfb$q <- as.ordered(dfb$q)
ge <- list(
scope = 'south america',
showland = TRUE,
landcolor = toRGB("gray85"),
subunitwidth = 1,
countrywidth = 1,
subunitcolor = toRGB("white"),
countrycolor = toRGB("white")
)
plot_geo(dfb, lon = ~long, lat = ~lat, text = ~poph,
marker = ~list(size = sqrt(pop/10000) + 1, line = list(width = 0)),
color = ~q, locationmode = 'country names') %>%
layout(geo = ge, title = 'Populations<br>(Click legend to toggle)')