在SF多边形中绘制箭头

时间:2019-01-24 08:03:03

标签: r spatial sf

在R中从多边形的一个质心到另一个质心绘制弯曲箭头的正确方法是什么。

我从图表包中尝试了Curvedarrow。但它在其他一些地方的绘制箭头可能是由于坐标系不同。

library(sf)
nc <- st_read(system.file("shape/nc.shp", package="sf"))
plot(st_geometry(nc))
nc$centroid<- st_centroid(nc$geometry)
plot(nc$centroid, add=T, pch=3, col="red")

enter image description here

1 个答案:

答案 0 :(得分:2)

根据您的示例。为了简化,只需使用前四个多边形:

> plot(st_geometry(nc)[1:4])

获取四个多边形质心。忽略警告:

> xy = st_coordinates(st_centroid(nc)[1:4,])
Warning messages:
1: In st_centroid.sf(nc) :
  st_centroid assumes attributes are constant over geometries of x
2: In st_centroid.sfc(st_geometry(x), of_largest_polygon = of_largest_polygon) :
  st_centroid does not give correct centroids for longitude/latitude data

并在质心之间绘制一些弯曲的箭头:

> curvedarrow(from=xy[2,],to=xy[1,],lcol="red", curve=.2)
> curvedarrow(from=xy[4,],to=xy[1,],lcol="red", curve=.2)

有人弯腰了,所以把它弄平一点:

> curvedarrow(from=xy[4,],to=xy[1,],lcol="red", curve=.12)

enter image description here

我已将所有质心添加到此绘图中,因此您可以看到它正在绘制从质心到质心的曲线。