Как добавить точки данных из фрейма данных на полигональную карту административных районов Словакии? - PullRequest
3 голосов
/ 11 июля 2019

простите, если это основной вопрос, я пишу здесь впервые, поэтому заранее благодарю.

Я экспортировал отчет из Google Analytics с столбцами Долгота, Широта и Сеансы и хочу добавить эти точки данных на карту многоугольника, которую я создал в R для административных районов Словакии.

Это то, что у меня есть сейчас.

##Load the Raster Library
library(raster)

##Get the Province Shapefile for Slovakia
slovakia_level_1 <- getData('GADM', country='SVK', level=1)
slovakia_level_2 <- getData('GADM', country='SVK', level=2)

##Plot this shapefile
plot(slovakia_level_1)

library(ggmap)   ##load the ggmap package so we can access the crime data

## read our dataset with sessions from google analytics ( more on how to read excel files http://www.sthda.com/english/wiki/reading-data-from-excel-files-xls-xlsx-into-r)

library(readxl) ## this is the dataframe from google analytics and i would like to plot these data to the slovakia administrtaive region map
lugera <- read_excel("Analytics 01. [Lugera.sk] - [Reporting View] - [Filtered Data] New Custom Report 20190101-20190627.xlsx")

Но я действительно не знаю, как двигаться дальше. Я пошел на основе этой статьи http://data -analytics.net / wp-content / uploads / 2014/09 / geo2.html , но я застрял, когда мне нужно было построить точки.

Вот пример того, как выглядит отчет Google Analytics:

Longitude Latitude Sessions
17.1077 48.1486 25963
0.0000  0.0000  13366
21.2611 48.7164 4732
18.7408 49.2194 3154
21.2393 49.0018 2597
18.0335 48.8849 2462
19.1462 48.7363 2121
17.5833 48.3709 1918
18.0764 48.3061 1278
14.4378 50.0755 1099
20.2954 49.0511 715
18.1571 47.9882 663
18.6245 48.7745 653
17.8272 48.5918 620
18.9190 49.0617 542
19.1371 48.5762 464
-6.2603 53.3498 369
18.1700 48.5589 369
20.5637 48.9453 325
-0.1278 51.5074 284
21.9184 48.7557 258

Может ли кто-нибудь помочь мне, как продвинуться отсюда, когда я изо всех сил пытаюсь выяснить, как нанести эти точки на карту многоугольника.

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

Надеюсь, это было понятно, но если нет, скажите, пожалуйста, я уточню свой вопрос, это мой первый вопрос.

Большое спасибо!

UPDATE

Я пытался воспроизвести ответ Джея, и первая карта с красными точками работает потрясающе! Спасибо!

Но в случае тепловой карты я получаю ошибки и не могу воспроизвести ту же карту, что и несколько ошибок.

Ниже мой код, как он выглядит, и я не уверен, где проблема, поскольку я попытался назвать свой фрейм данных как ses так же, как в ответе Джея.

##Load the Raster Library

library(raster)  # imports library(sp)
slovakia_level_1 <- getData('GADM', country='SVK', level=1)


##Plot
plot(slovakia_level_1)
points(coordinates(slovakia_level_2), pch=20, col="red")

#ses is my google analytics dataframe where all 3 columns Longitude, Latitude and Sessions are numeric

## it is imported excel file to r and stored as a dataframe

ses

spdf <- SpatialPointsDataFrame(coords=ses[1:2], data=ses[3], 
                               proj4string=CRS(proj4string(slovakia_level_2)))
ppl.sum <- aggregate(x=spdf["Sessions"], by=slovakia_level_2, FUN=sum)
spplot(ppl.sum, "Sessions", main="Sessions in Slovakia")

Это ошибки, которые я получаю

spdf <- SpatialPointsDataFrame(coords=ses[1:2], data=ses[3], 
+                                proj4string=CRS(proj4string(slovakia_level_2)))
Error in proj4string(slovakia_level_2) : 
  object 'slovakia_level_2' not found
> ppl.sum <- aggregate(x=spdf["Sessions"], by=slovakia_level_2, FUN=sum)
Error in aggregate(x = spdf["Sessions"], by = slovakia_level_2, FUN = sum) : 
  object 'spdf' not found
> spplot(ppl.sum, "Sessions", main="Sessions in Slovakia")
Error in spplot(ppl.sum, "Sessions", main = "Sessions in Slovakia") : 
  object 'ppl.sum' not found

Пожалуйста, примите мою огромную благодарность за помощь в моем первом вопросе, и я не могу выразить свое уважение всем людям в StackOverflow.

Спасибо

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

На самом деле в пакет sp включена функция coordinates() (импортированная из raster), с помощью которой мы легко можем добавить points к plot.

library(raster)  # imports library(sp)
slovakia_level_1 <- getData('GADM', country='SVK', level=1)
slovakia_level_2 <- getData('GADM', country='SVK', level=2)

##Plot
plot(slovakia_level_1)
points(coordinates(slovakia_level_2), pch=20, col="red")

enter image description here

Чтобы получить тепловую карту с использованием ваших данных Google Analytics (здесь ses), мы можем использовать spplot(), также включенный в sp.Сначала нам нужно создать SpatialPointsDataFrame, который - согласно этого поста на gis.stackexchange - мы собираем, чтобы сопоставить ses$Sessions точек и полигонов из slovakia_level_2.

spdf <- SpatialPointsDataFrame(coords=ses[1:2], data=ses[3], 
                               proj4string=CRS(proj4string(slovakia_level_2)))
ppl.sum <- aggregate(x=spdf["Sessions"], by=slovakia_level_2, FUN=sum)
spplot(ppl.sum, "Sessions", main="Sessions in Slovakia")

Результат

enter image description here

Данные

# your data from google analytics above
ses <- structure(list(Longitude = c(17.1077, 0, 21.2611, 18.7408, 21.2393, 
18.0335, 19.1462, 17.5833, 18.0764, 14.4378, 20.2954, 18.1571, 
18.6245, 17.8272, 18.919, 19.1371, -6.2603, 18.17, 20.5637, -0.1278, 
21.9184), Latitude = c(48.1486, 0, 48.7164, 49.2194, 49.0018, 
48.8849, 48.7363, 48.3709, 48.3061, 50.0755, 49.0511, 47.9882, 
48.7745, 48.5918, 49.0617, 48.5762, 53.3498, 48.5589, 48.9453, 
51.5074, 48.7557), Sessions = c(25963L, 13366L, 4732L, 3154L, 
2597L, 2462L, 2121L, 1918L, 1278L, 1099L, 715L, 663L, 653L, 620L, 
542L, 464L, 369L, 369L, 325L, 284L, 258L)), row.names = c(NA, 
-21L), class = "data.frame")
1 голос
/ 11 июля 2019

Самый простой способ сделать это - это (slov_df - ваш набор данных):

library(sp)
library(ggplot2)

slov_reg <- fortify(slovakia_level_2)

ggplot() +
  geom_polygon(data = slov_reg, aes(x = long, y = lat, group = group), col = "black", fill = NA) +
  geom_point(data = slov_df, aes(x = Longitude, y = Latitude))

enter image description here

EDIT :

Хорошее решение от jay.sf. Если вам нравится это, позвольте мне предоставить другой вариант:

sp_google <- SpatialPointsDataFrame(coords=slov_df[1:2], data=slov_df[3], 
                                    proj4string=CRS(proj4string(slovakia_level_2)))


slovakia_level_2@data$Sessions <- over(slovakia_level_2, sp_google, fn = sum)$Sessions
slovakia_level_2@data$id <- row.names(slovakia_level_2@data)
slov_reg <- fortify(slovakia_level_2, region = "id")
slov_reg <- join(slov_reg, slovakia_level_2@data, by="id")


ggplot() +
  geom_polygon(data = slov_reg, aes(x = long, y = lat, group = group, fill = Sessions), col = "black") +
  scale_fill_gradient(low = "yellow",  high = "red", na.value = "lightgrey") +
  theme_bw()

Это немного больше работы, но в итоге ggplot предлагает вам гораздо более широкий диапазон настроек. Это вопрос ваших предпочтений.

enter image description here

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