我正在尝试使用 R 中的 ggplot2 在绘图上绘制 lat long 点。轴是 y 上的 lats 和 x 上的 longs。我希望一个给定的位置点成为我的绘图的中心,而散点图上的其余点相对于它们与该点的距离(这些点的纬度值来自数据框)。那个特定的点怎么会是这一切的中心呢?我尝试制作两个单独的 geom_point 图层,并首先在中心添加一个我想要的点,然后将第二个 geom 图层与其余数据一起添加。但它不起作用。当我只在绘图上绘制主要中心点时,我还尝试使用第一个几何层的经纬度限制来尝试 coord_fixed,但在添加第二层后,它不会保留在中心。我也想知道为什么没有函数或属性可以围绕特定点设置图的中心,以便其余点可以落在图上的任何位置,但焦点就在我想要的地方,但也许它也是具体的一件事。另外,轴上的单位可以转换为米吗?
问问题
277 次
1 回答
2
最简单的方法是确定您想要的 x 轴范围以及您想要的 y 轴范围。测量沿 x 轴到距目标点最远点的距离,并确保 x 轴范围在两侧都这么大。对 y 轴执行相同的操作。
为了演示,我将使用 x 和 y 坐标制作一个随机点样本,每个点都变小并变黑:
set.seed(1234) # Makes this example reproducible
df <- data.frame(x = rnorm(200), y = rnorm(200), colour = "black", size = 1)
现在我将随机选择一个作为我的目标点,使其变大变红:
point_of_interest <- sample(200, 1)
df$colour[point_of_interest] <- "red"
df$size[point_of_interest] <- 5
因此,让我们计算距离目标最远的南北和东西点,并计算一个包含所有点但目标位于中心的范围:
max_x_diff <- max(abs(df$x[point_of_interest] - df$x))
max_y_diff <- max(abs(df$y[point_of_interest] - df$y))
x_range <- df$x[point_of_interest] + c(-max_x_diff, max_x_diff)
y_range <- df$y[point_of_interest] + c(-max_y_diff, max_y_diff)
现在我们只需要绘制:
ggplot(df, aes(x, y, colour = colour, size = size)) +
geom_point() +
scale_colour_identity() +
lims(x = x_range, y = y_range) +
scale_size_identity() +
coord_equal()
我们可以看到,即使我们的目标远离集群的中心,目标仍然在图的中心。
关于将纬度和经度更改为米,这需要坐标转换。这已经在 Stack Overflow 上回答了很多次,我不会在这里重复这些答案。您可以查看类似rgdal
或可能SpatialEpi
具有该latlong2grid
功能的软件包。
于 2020-06-10T20:51:21.287 回答