微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何相对于中心按顺时针顺序对 R 中的点进行排序?

如何解决如何相对于中心按顺时针顺序对 R 中的点进行排序?

我有一个包含 X 和 Y 坐标的数据集,我试图找出一种方法,将它们从 R 的中心沿顺时针(或逆时针)方向排序。以经纬度的中位数为中心。

样本数据:

df <- structure(list(name = c("A","B","C","D","E","F","G","H","I","J"),lat = c(22.57,22.69,22.72,22.5,22.66,22.19,22.6,22.27,22.31,22.15),lon = c(88.69,88.84,88.77,88.85,88.63,88.91,88.54,88.62,88.78,88.66)),class = "data.frame",row.names = c(NA,-10L))

The points

我要说的是,上图中的点可以这样排序:G -> E -> A-> C -> B 等等。

到目前为止,我已经尝试使用 arc tan 函数计算极坐标位置,然后对它们进行排序,但没有产生好的结果。

我也尝试过 orderPoints 函数,但那里的排序也很可疑。我得到的顺序是这样的:D-> F-> G-> B-> H-> J-> I-> E-> C-> A。虽然其中一些似乎是有序的,但其他人是远远望去。

任何帮助都意义重大!

解决方法

(正如@thelatemail 所指出的,答案将取决于假设哪个点是点排列的中心。下面的方法在中间点附近取一个点,选择提供您期望的顺序。实际中点将在 E 之前表示 A。)

df$angle = atan2(df$lat - 22.5,df$lon - 88.68)
library(ggplot2)
ggplot(df[order(df$angle,decreasing = TRUE),],aes(lon,lat,color = angle,label = name)) +
  geom_path(arrow = arrow(type = "closed",length = unit(0.05,"npc"))) + 
  geom_text(size = 8,color = "black") +
  annotate("point",x = 88.68,y = 22.5,color = "red")

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。