Диаграмма рассеяния с точками длинной длины по отношению к данной точке в центре диаграммы
Я пытаюсь построить длинные точки широты на графике, используя 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
функция.