无法将 topojson 读入 R 以使用 ggplot2 和 sp 进行绘图
Having trouble reading a topojson into R for plotting using ggplot2 and sp
我正在尝试将 topojson 读入 R 以供 ggplot2 使用。看来 rgdal
包要退役了,所以我想在 sp
包中使用 st_read
,但我只是得到一个大盒子,仅此而已。看起来我得到的字段差不多是正确的,但它肯定没有把整个东西都正确地放在那里。它说它只有一个特征和两个字段。知道我可能做错了什么吗?谢谢。
我尝试按照这些说明进行操作,但似乎没有任何效果:
https://www.r-bloggers.com/2014/09/overcoming-d3-cartographic-envy-with-r-ggplot/
我可以给出一个示例文件---我知道它有效,因为我们确实使用它并且能够用 D3 显示它,但我希望能够使用 ggplot2 显示它。
无效的示例代码:
library(ggplot2)
library(sp)
j <- sf::st_read("mytopo.json")
ggplot() +
geom_sf(aes(fill = iso_a3), j) +
coord_sf()
j <- geojsonio::topojson_read("mytopo.json")
ggplot() +
geom_sf(aes(fill = iso_a3), j) +
coord_sf()
注意:出于安全原因删除了示例中的 link。
这些文件也可以在 mapshaper.org. I used the online upload, but there's a command line tool 的帮助下在 R 中打开。
使用 mapshaper 将文件导出为 shapefile。可能有一些选项可以纠正 R 难以处理的几何形状,但我不熟悉 mapshaper 及其选项。下面的代码很好地解决了 R 中无效几何图形的问题。一旦被 mapshaper 转换,您将拥有一个包含 .dbf、.shp 和 .shx 文件的文件夹,R 的 sf
包可以读取这些文件。
library(dplyr)
library(sf)
library(ggplot2)
my_sf <- st_read('path/to/shapefile/folder/')
#> Reading layer `00005f8d4076b8ced__' from data source `path/to/shapefile/folder/' using driver `ESRI Shapefile'
#> Simple feature collection with 218 features and 1 field (with 3 geometries empty)
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 0 ymin: 0 xmax: 940 ymax: 470
#> CRS: NA
# But some geometries are not valid (only showing first 3 rows)
st_is_valid(my_sf[1:3,])
#> [1] TRUE FALSE FALSE
# Fixing the invalid geometries taken from:
# https://r-spatial.org/r/2017/03/19/invalid.html#making-invalid-polygons-valid
valid <- st_is_valid(my_sf)
my_sf_valid <- st_buffer(my_sf[!is.na(valid),], 0.0)
ggplot(my_sf_valid) +
geom_sf()
制图出现但被翻转了。这里有一个 gis 堆栈问题:https://gis.stackexchange.com/a/233792/161721
可能与 .svg/topojson 文件的 mapshaper 翻转坐标有关
width= (SVG/TopoJSON) Set the width of the output dataset in pixels. When used with TopoJSON output, this option switches the output coordinates from geographic units to pixels and flips the Y axis. SVG output is always in pixels (default SVG width is 800).
以上引用自:https://github.com/mbloch/mapshaper/wiki/Command-Reference
由 reprex package (v2.0.1)
于 2022-03-18 创建
我正在尝试将 topojson 读入 R 以供 ggplot2 使用。看来 rgdal
包要退役了,所以我想在 sp
包中使用 st_read
,但我只是得到一个大盒子,仅此而已。看起来我得到的字段差不多是正确的,但它肯定没有把整个东西都正确地放在那里。它说它只有一个特征和两个字段。知道我可能做错了什么吗?谢谢。
我尝试按照这些说明进行操作,但似乎没有任何效果:
我可以给出一个示例文件---我知道它有效,因为我们确实使用它并且能够用 D3 显示它,但我希望能够使用 ggplot2 显示它。
无效的示例代码:
library(ggplot2)
library(sp)
j <- sf::st_read("mytopo.json")
ggplot() +
geom_sf(aes(fill = iso_a3), j) +
coord_sf()
j <- geojsonio::topojson_read("mytopo.json")
ggplot() +
geom_sf(aes(fill = iso_a3), j) +
coord_sf()
注意:出于安全原因删除了示例中的 link。
这些文件也可以在 mapshaper.org. I used the online upload, but there's a command line tool 的帮助下在 R 中打开。
使用 mapshaper 将文件导出为 shapefile。可能有一些选项可以纠正 R 难以处理的几何形状,但我不熟悉 mapshaper 及其选项。下面的代码很好地解决了 R 中无效几何图形的问题。一旦被 mapshaper 转换,您将拥有一个包含 .dbf、.shp 和 .shx 文件的文件夹,R 的 sf
包可以读取这些文件。
library(dplyr)
library(sf)
library(ggplot2)
my_sf <- st_read('path/to/shapefile/folder/')
#> Reading layer `00005f8d4076b8ced__' from data source `path/to/shapefile/folder/' using driver `ESRI Shapefile'
#> Simple feature collection with 218 features and 1 field (with 3 geometries empty)
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 0 ymin: 0 xmax: 940 ymax: 470
#> CRS: NA
# But some geometries are not valid (only showing first 3 rows)
st_is_valid(my_sf[1:3,])
#> [1] TRUE FALSE FALSE
# Fixing the invalid geometries taken from:
# https://r-spatial.org/r/2017/03/19/invalid.html#making-invalid-polygons-valid
valid <- st_is_valid(my_sf)
my_sf_valid <- st_buffer(my_sf[!is.na(valid),], 0.0)
ggplot(my_sf_valid) +
geom_sf()
制图出现但被翻转了。这里有一个 gis 堆栈问题:https://gis.stackexchange.com/a/233792/161721
可能与 .svg/topojson 文件的 mapshaper 翻转坐标有关
width= (SVG/TopoJSON) Set the width of the output dataset in pixels. When used with TopoJSON output, this option switches the output coordinates from geographic units to pixels and flips the Y axis. SVG output is always in pixels (default SVG width is 800).
以上引用自:https://github.com/mbloch/mapshaper/wiki/Command-Reference
由 reprex package (v2.0.1)
于 2022-03-18 创建