交互式地图

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)
    )

StackOverflow 文档

对于两种方法的组合,在上面的例子中交换 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)')

这是一个快照