Диаграмма рассеяния с точками длинной длины по отношению к данной точке в центре диаграммы

Я пытаюсь построить длинные точки широты на графике, используя ggplot2 в R. Оси - широта на y и длинные на x. Я хочу, чтобы данная точка местоположения была центром моего графика, а остальные точки на графике рассеяния относительно того, как далеко они находятся от этой точки (значения широты и долготы этих точек берутся из фрейма данных). Как эта конкретная точка может быть в центре всего? Я попытался создать два отдельных слоя geom_point и сначала добавил одну точку, которую я хочу в центре, а затем добавил второй слой geom с остальными данными. Но не работает. Я также попробовал ordin_fixed, используя пределы широты и долготы из первого слоя геометрии, когда я нанес только главную центральную точку на графике, но после добавления второго слоя она не остается в центре.Я также задаюсь вопросом, почему нет функции или атрибута для установки центра графика вокруг определенной точки, чтобы остальные точки могли падать где угодно на графике, но точка фокусировки находится там, где я хочу, но, возможно, это слишком конкретная вещь. Кроме того, можно ли преобразовать единицы на осях в метры?

1 ответ

Самый простой способ сделать это - выяснить, каким должен быть диапазон оси 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()

Мы можем видеть, что даже если наша цель находится далеко от центра кластера, цель остается в центре графика.

Что касается изменения широты и долготы на метры, это требует преобразования координат. На этот вопрос много раз отвечали в stackru, и я не буду дублировать эти ответы здесь. Вы можете проверить такие пакеты, какrgdal или возможно SpatialEpi который имеет latlong2grid функция.

Другие вопросы по тегам