如何解决如何在没有坐标的情况下在地图上绘制数据?
我正在尝试绘制如下数据框:
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
.
.
.
对于澳大利亚的每个地区,都有多个描述不同的行。我可以使用哪些包来绘制没有坐标的估计地图?
我在 ggplot2 教程中提到的 ggplot
和 ozmaps
中尝试使用 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 绘制的预期图:
解决方法
基本上,您的第一个问题是您在 ozmaps
包中调用了错误的对象。它是ozmap_states
,同时你叫你的oz_states
我想出了这个解决方案,我认为它可以满足您的需求并提升它。
df <- data.frame(code = rep(c(0,1,2),name = rep(c("Australia","New South Wales","Victoria"),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 状态图的形状文件中提取,因此满足了问题的需要。
当您添加更多数据时,更多的澳大利亚将根据它们的数量着色。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。