如何在没有坐标的地图上绘制数据?
Posted
技术标签:
【中文标题】如何在没有坐标的地图上绘制数据?【英文标题】:How to plot data on map without coordinates? 【发布时间】:2021-08-19 10:12:59 【问题描述】:我正在尝试绘制如下数据框:
code name description estimate
0 Australia Vegetables 854658
0 Australia Fruit 667541
1 New South Wales Vegetables 45751
1 New South Wakes Fruit 77852
2 Victoria Vegetables 66211
2 Victoria Fruit 66211
.
.
.
对于澳大利亚的每个地区,都有多行具有不同的描述。我可以使用哪些包来绘制没有坐标的估计地图?
我尝试 ggplot
和 ozmaps
与 ggplot2 教程中提到的 sf
,我只过滤了水果的数据框,但有错误消息:
stat_sf requires the following missing aesthetics: geometry
我试过的代码:
ggplot() +
geom_sf(oz_states,mapping=aes())+
geom_sf(df,mapping=aes()) +
coord_sf()
我找到的方法都是需要经纬度来绘制数据图,我试过ggmaps
或者geom_ploygon
但是没有找到正确的方法。有没有一种可能的方法来绘制只有区域标签的地图?
这是我用 tableau 绘制的,这也是使用 r 绘制的预期图:
【问题讨论】:
只是出于好奇,你能不能不从互联网上提取纬度/经度坐标,将其保存为 .csv,然后在名称上加入您当前的数据框?还是您必须在没有互联网的情况下明确执行此操作? @HanselPalencia 从互联网上提取坐标很好,但这对我来说不是一个好选择,我试图在不添加外部信息的情况下这样做。我也很好奇是否有一种方法或包可以用来简单地用标签绘制。 【参考方案1】:所以本质上,您的第一个问题是您在 ozmaps
包中调用了错误的对象。我是ozmap_states
,同时你打电话给你的oz_states
我想出了这个解决方案,我认为它可以满足您的需求并提升它。
df <- data.frame(code = rep(c(0,1,2), 2), name = rep(c("Australia", "New South Wales", "Victoria"), 2), description = rep(c("Vegetables", "Fruit"), 3), count =
c(854658, 45751, 66211, 667541, 77852, 66211))
library(tidyverse)
library(sf)
library(ozmaps)
library(leaflet)
library(tmap)
states_full <- right_join(df, ozmap_states, by = c("name" = "NAME"))
data <- states_full %>%
filter(description == "Fruit") %>%
select(name, geometry, count)
ozmap1 = tm_shape(ozmap_states) +tm_polygons()
tmap_mode("view")
ozmap1 + tm_shape(st_as_sf(data)) + tm_fill(col = "count")
基本上,您只需在正确的连接中使用您的数据,而不是使用我从您的数据创建的示例数据框。您还可以在过滤功能中选择要水果还是蔬菜。
tmap包是一个地图包,可以制作像地图一样的交互式传单。
您可以在这里查看一些教程:https://geocompr.robinlovelace.net/adv-map.html
最终解决方案看起来像这样。
注意:此解决方案使用 lng/lat,但它直接从 ozmaps 包中的 oz 状态图的形状文件中提取它,因此满足了问题的需要。
当您添加更多数据时,将根据数量对澳大利亚更多地区进行着色。
【讨论】:
以上是关于如何在没有坐标的地图上绘制数据?的主要内容,如果未能解决你的问题,请参考以下文章
使用可观察的地理坐标集合在 WP7 的 bing 地图上绘制路线
如何从excel中检索坐标并根据地图绘制点? - MATLAB