Отображение плотности точечных данных с использованием stat_density2d и ggmap - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь создать серию карт плотности, используя stat_density2d, ggplot2 и ggmap, которые имеют одинаковый масштаб. Для этого я использовал facet_wrap на картах. Набор данных содержит тысячи записей, которые представляют отдельные случаи в определенном c geographi c регионе в разные годы. Я успешно создал карты, но я думаю, что масштаб, представляющий плотности, все еще выключен. Я в основном хочу иметь градиентную шкалу, представляющую различные плотности точек данных (например, точек на квадратный километр). Более подробная информация ниже:

Набор данных имеет 3 столбца - «год», «широта» и «долгота». Год колеблется от 1975 до 2020 года. Ниже приведен упрощенный пример:

   year    lat       lon
1  1993    143.747   -37.572
2  1991    150.936   -33.851
3  2004    143.809   -37.564
4  2003    143.809   -37.564
5  2007    143.814   -37.568
6  2004    143.708   -37.546
7  2011    143.814   -37.568
8  2014    143.800   -37.555
9  2017    143.807   -37.555
......

Это код, который я на самом деле использовал для достижения того, чего я хочу:

library(tidyverse)
library(ggplot2)
library(ggmap)
library(RColorBrewer)

data <- read.csv("data.csv")

data_subset <- subset(data, select = c("application_year", "lat", "lon"))
data_subset$year_group <- cut_interval(data_subset$application_year, n = 9) ##This is to break the data into manageable facets, in this case five year intervals

data_subset$year_group <- as.factor(data_subset$year_group)

base_map <- get_map(location = c(144.946457,- 37.840935), zoom = 9, source = "stamen", maptype = "toner-background")

density_map <- ggmap(base_map) +
  stat_density2d(data=data_subset,
                 aes(x=lon, y=lat, fill=..level.., alpha=..level..), geom="polygon", na.rm = TRUE, contour = TRUE) +
  scale_fill_gradient(low = "yellow", high = "red") +
  guides(alpha = FALSE) +
  facet_wrap(~year_group)

print(density_map)

Ниже приведено фактическое количество записей на интервал:

[1975,1980] (1980,1985] (1985,1990] (1990,1995] (1995,2000] (2000,2005] (2005,2010] (2010,2015] (2015,2020] 
        534        1354        6478       10860       11411       13571       12855       10888        6239 

Это фактический результат, который я получаю, используя мой фактический набор данных:

Фасетная карта, показывающая плотности

Проблема в Изображение состоит в том, что более поздние карты (начиная с 1990 года) имеют гораздо более высокую плотность данных, но это не проявляется в изображении. Изображения подразумевают, что набор данных со временем становится более географически сконцентрированным (что и происходит), но также есть только больше точек. Это означает, что если все девять карт имеют один и тот же масштаб, более поздние записи должны быть перекошены в сторону спектра красного цвета во всех регионах, а не только в одной наиболее концентрированной.

Для справки, я построил те же данные, используя geom_point, чтобы показать, как кластеры данных:

Точечные данные

Я не на самом деле знаю, что stat_density2d делает в фоновом режиме и действительно ли это правильная функция для использования. Но в основном я хочу показать изменения плотности с течением времени, выделив при этом горячие точки и то, меняется ли это со временем.

Надеюсь, все это имеет смысл. Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...