相对于图中心给定点有较长点的散点图

问题描述 投票:0回答:1

我正在尝试在R中使用ggplot2在图上绘制纬度长点。轴是y上的纬度,而x上是经度。我希望给定的位置点是绘图的中心,而散点图上的其余点则要相对于它们与该点的距离(这些点的经纬度值来自数据帧)。那个特定点怎么能成为一切的中心呢?我尝试制作两个单独的geom_point图层,并首先在中心添加了我想要的一个点,然后在第二个geom图层中添加了其余数据。但这是行不通的。当我仅在绘图上绘制主要中心点时,我还尝试通过使用第一层几何层的纬度长限度来尝试coord_fixed,但在添加第二层之后,它不再保留在中心。我还想知道为什么没有函数或属性可以围绕特定点设置图的中心,以便其余点可以落在图上的任何位置,但是焦点位于我想要的位置,但也许也是具体的东西。另外,可以将轴上的单位转换为米吗?

r ggplot2 latitude-longitude scatter-plot geom
1个回答
0
投票

最简单的方法是弄清楚您希望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()

enter image description here

我们可以看到,即使我们的目标远离群集的中心,目标仍然位于绘图的中心。

© www.soinside.com 2019 - 2024. All rights reserved.