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